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/

  • 相关阅读:
    1010 Radix (25 分)(二分)【回顾】
    1089 Insert or Merge (25 分)(two pointers)【回顾】
    1084 Broken Keyboard (20 分)(字符串处理)
    Listener监听器之HttpSessionListener
    在IE中如何在用户直接关闭窗口前清除Session
    C#文件操作简单封装
    几个实用的对String类的扩展
    C# 数据加密解密
    在IIS6中配置asp.net MVC网站时HTTP 错误 500.21 Internal Server Error解决方案
    C#常用的正则表达式
  • 原文地址:https://www.cnblogs.com/zhengming2016/p/6750493.html
Copyright © 2011-2022 走看看