session与cookie的区别与联系

来源:互联网 发布:难忘网络真情意 编辑:程序博客网 时间:2024/05/19 18:42

title:cookie session总结
tags: 新建,模板,小书匠

grammar_cjkRuby: true

cookie

  • 作用
    为了解决http协议无状态的缺陷所做的努力
  • 存储位置
    是服务器存储在本地客户端的一小段文本,是在客户端保持状态的机制.
  • 机制
    服务器通过HTTP头向客户端发送cookie,然后客户端的浏览器将cookie解析成本地文件,当访问网址时,将自动附上对应服务器的cookie.
    • 浏览器查找cookie的规则
      浏览器会查找所有的cookie,找出作用范围大于或者等于请求资源范围的cookie,于是把该cookie附在发送给服务器的HTTP请求头上
    • 主要内容
      • 键值对
        保存的数据
      • 过期时间
        如果没有设置过期时间,则此cookie保存在内存中,生存时间为浏览器会话时间称为会话cookie。如果设置了,则会保存到硬盘中。
      • 路径和域
        一起构成了cookie的作用范围

session

  • 作用
    同样是为了结局HTTP协议无状态缺陷的努力
  • 存储位置
    存储在服务器端,服务器用一种类似于散列表的结构保存session
  • 机制
    session采取的是存储在服务器端,针对每一个用户生成一个session,用户在客户端存储一个标识,当用户通过浏览器访问时,将标识也就是sessionid传给服务器,服务器再根据传过来的sessionid查找每一个用户对应的session.

  • session的存取流程
    用户每次访问服务器时,会将sessionid一起发送过去.当服务器接收到客户端传来的数据时,会在其中寻找sessionid.如果没有找到,就会为当前的客户端创建一个session,并将sessionid返回给客户端

  • 传送sessionid的几种方法

    1. 使用cookie进行传送,但是有的浏览器可以禁止cookie机制,所以就产生了以下两种解决方法
    2. 使用url重写,直接将sessionid拼接到url路径后面
    3. 表单隐藏字段

cookie与session对比

  1. 存储数据类型不同
    cookie只能存储ASCII字符串,如果想要存储二进制或者Unicode,还需要进行格式设置.
    session则可以看成一个java容器类,可以存储各种各样java类型
    2.存储位置不同而导致的保密程度不同
    cookie存储在客户端,对客户是可见的.优化的方法就是敏感的信息不要存储在cookie中.还可以对cookie进行加密,到了服务器再杰迷
    session存储在服务器端,对用户不可见,所以安全程度较高.
    3.可设置的有效时间不同
    cookie可以通过设置很大的数字来代表持久记录用户信息
    session的默认过期时间为会话结束,如果将session过期时间设置的过长,会带来内存溢出的风险
  2. 服务器压力不同
    session因为保存在服务端,因而当并发访问量过多时.会造成服务器内存消耗过大,所以一般不太用session来追踪用户会话
    而cookie保存在客户端,不占用服务器资源
    5.过期时间不用
    cookie可以设置为本浏览器窗口和子浏览器窗口有效(过期时间设为-1),还可设为对所有窗口有效(过期时间设为某个大于0的数字)
    session只能为本浏览器窗口和子浏览器窗口有效
    6.跨域支持不同
    cookie可以跨域,比如将domain属性设置为”.abc”,那么所有以”.abc”结尾的域都能访问该cookie.
    而session不支持跨域,仅对所在域有效.
1 0