zoukankan      html  css  js  c++  java
  • Cookie/Session的机制与安全

    1: 什么是 Cookie?
    1:Cookie是由客户端保存的小型文本文件,其内容为一系列的键值对。Cookie 一般是由HTTP服务器设置的,保存在浏览器中。客户端也可以设置 Cookie。
    2:Cookie具有不可跨域名性。
    3:从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期。

    2: 什么是 Session?
    Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。

    Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话,即每次用户请求到达服务器时,HTTP服务器并不知道这个用户是谁、是否登录过等。

    3: Session的有效期
    由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

    当同一机器的两个浏览器窗口访问服务器时,会生成2个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口除外,这类子窗口会共享父窗口的Cookie,因此会共享一个Session。若双击桌面浏览器图标等打开的窗口则会有2个不同的Session,。
    这个跟客户端的 sessionStorage 设置的值保存状态很像。(具体点击链接查看 cookie sessionStorage localStorage区别

    4: 如何创建一个 Session
    当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。
    例如:
    // JSP中内置了Session隐藏对象
    HttpSession session = request.getSession(); // 获取Session对象
    session.setAttribute("loginTime", new Date()); // 设置Session中的属性

    5: cookie 如何做到永久登录?
    1: 用户提交用户名和密码的表单,这通常是一个POST HTTP请求。
    2: 服务器验证用户名与密码,如果合法则返回200 的HTTP响应, 并设置cookie 的userName, password 和 Cookie的有效期。
    3: 浏览器存储该Cookie。
    4: 浏览器再发送请求时, 就会把cookie里的 userName 和 password 发送给服务器。
    5: 服务器收到第2次请求,与数据库进行比较,验证成功,则处理当前用户已经登录。

    把 password 等敏感信息保存到 cookie 中, 比较危险, 一种方案是把 password 加密保存到数据库, 下次访问时解密并且与数据库比较。但是因为Cookie是明文传输的,因此Cookie中最好不要放敏感数据。

    6: session 如何做到永久登录?
    1: 用户提交用户名和密码的表单,这通常是一个POST HTTP请求。
    2: 服务器验证用户名与密码。如果正确则把当前用户对象(包括用户名和密码)存储到redis中,并生成它在redis中的ID。
    这个ID称为Session ID,通过Session ID可以从Redis中取出对应的用户对象, 比如密码 都存储在这个用户对象中。
    设置Cookie为sessionId=xxxxxx并发送HTTP响应。
    Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。
    3: 浏览器存储该Cookie。
    4: 浏览器再发送请求时, 就会把cookie里的sessionID 发送给服务器。
    5: 服务器收到第2次请求,发现Cookie中有SessionID,根据该ID从Redis中取出对应的用户对象,查看该对象的状态并继续执行业务逻辑。

    参考地址:

    http://harttle.com/2015/08/10/cookie-session.html

    http://blog.csdn.net/fangaoxin/article/details/6952954/

  • 相关阅读:
    ArrayList用法
    MessageBox
    将文本文件导入Sql数据库
    在桌面和菜单中添加快捷方式
    泡沫排序
    Making use of localized variables in javascript.
    Remove double empty lines in Visual Studio 2012
    Using Operations Manager Connectors
    Clear SharePoint Designer cache
    Programmatically set navigation settings in SharePoint 2013
  • 原文地址:https://www.cnblogs.com/zhengming2016/p/6750493.html
Copyright © 2011-2022 走看看