cookie session问题总结

1  Cookie和Session原理解析:

    客户端第一次发送请求给服务器,此时服务器产生一个唯一的sessionID,并返回给客户端(通过cookie),此时的cookie并没有setMaxAge();只是保存在客户端的内存中,并与一个浏览器窗口对应着。

    第一次连接断开后,此后此客户端再发送请求给服务器时,就会在request请求中携带cookie,由于cookie中有sessionID,所以服务器就能辨识这就是刚才的客户,从而进行区分,购物车就是这样实现的。

2 Cookie机制

    * Cookie种类

     1) 以文件方式存在硬盘空间上的永久性cookie(设置了一定的有效期限)。当用户访问某网站时,浏览器会在本地硬盘上查找与该网站相关联的cookie。若存在,浏览器就将它与页面请求一起通过HTTP报头信息发送到站点,然后系统会对比cookie中各属性和值是否与存在服务器端的信息一致,更具比对结果判定是"初访者"还是"老客户"。

    2) 停留在浏览器所占内存的临时性cookie,关闭浏览器即从浏览器上进行删除。

   * Cookie的有效性

    cookie的maxAge决定这cookie的有效期,单位为秒

//新建cookie
Cookie cookie = new Cookie("username","jorgen");

//设置生命周期为MAX_VALUE 只要在有效期之前,登录网站cookie中信息将永远有效
cookie.setMaxAge(Integer.MAX_VALUE);

/**
* 设置为0,表示删除该cookie
*  cookie.setMaxAge(0);
* 
* maxAge为负数,为临时性cookie,cookie信息保存在浏览器内存中,关闭浏览器该cookie就将消失
* cookie默认maxAge 为-1
* cookie.setMaxAge(-1);
*/

//输出到客服端  (必须写)
response.addCookie(cookie);

  * cookie被浏览器禁用?

     cookie可以被人为禁止,则肯定存在其他机制以便在cookie被禁用时仍能把sessionID 传回服务器。

    1) URL重写,就是把sessionID直接附加在URL路径后面,jsp网站有demo.jsp?JSESSIONID=*

    2) 在页面表单里面增加隐藏域,使用post方式发生数据,较为复杂。服务器会自动修改表单,添加一个隐藏字段,在提交表单时,将sessionID传递回服务器。

<form name="testform" action="/XXXXX">
<input type="hidden" name="jsessionid" value="dfghjkliuytfk432j23hj4k23lk4hj23lk">
<input type="text">
</form>

  3 cookie与session区别:

    1) cookie数据存放在客户端,用来记录用户信息;session数据存放在服务器上;

    2) cookie存放在客户端,对客户端可见,存在被其他程序窥探或者修改;session存储在服务器端,对客户端透明,不存在敏感信息泄密风险;

    3) session保存在服务器端,每个用户都会产生一个session,如果并发访问的用户非常多,则会产生非常多的session,消耗大量服务器内存,因此一般访问量大的类似Google,Baidu不太可能使用session来追踪客户会话;

      cookie保存在客户端,不占用服务器资源,若并发浏览用户非常道,cookie是很好的选择。

    4) cookie的容量和个数有限,单个cookie的容量不超过4kb,很多浏览器限制一个站点最多保存20个cookie,而session则没有此限制。

  安全敏感程度高的数据存放在session中,其余信息可存放在cookie中

补充:

   1 session cache的区别;

     session是单用户回话状态,当用户访问网站时,产生一个sessionID,并存在于cookie中,每次向服务器请求时,发送这个cookies,再从服务器中检索是否有对应的sessionID保存的数据。

    cache是服务器缓存,所有用户共享。因此从cache中读取数据快,一些网站会把经常使用的数据放在cache中,提高访问速度,优化系统性能。

    2 session过多处理?

      当存在几千session时,为了提高访问效率,可以将其放置在Redis或memcache等此类内存缓存或者把session存放在SSD硬盘上。

猜你喜欢

转载自blog.csdn.net/Jorgen_s/article/details/89344524