嗨客网搜索
Cookie与Session

Session详解

Session概念

Session 在计算机中,尤其是在网络应用当中,被称为 “会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。

当程序需要为某个客户端的请求创建一个 session 时,服务器首先检查这个客户端的请求里是否已包含了一个 session 标识(称为 SessionID),如果已包含则说明以前已经为此客户端创建过 session,服务器就按照 SessionID 把这个 session 检索出来使用(检索不到,会新建一个),如果客户端请求不包含 SessionID,则为此客户端创建一个 session 并且生成一个与此 session 相关联的 SessionID,SessionID 的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,用来唯一标识 session,这个 SessionID 将会在本次响应中返回给客户端保存。

Session生命周期

Session 保存在服务器端,为了获取更高的存取速度,服务器一般会把 Session 放在内存里面,每个用户都会有一个独立的 Session。如果 Session 里面的内容太过复杂,当大量的用户访问服务器时,可能会导致内存溢出,所以我们的 Cookie 内容应当适当的精简。当我们第一次访问服务器时,服务器会给我们自动创建一个 Session,生成 session 后,只要用户继续访问,服务器就会更新 session 的最后访问时间,并且维护这个 session。当用户访问服务器一次,无论是否读写了 session,服务器都会认定这个 session 活跃(active)了一次。

当越来越多的用户访问我们的服务器时,因此我们的 session 会越来越多。为了防止内存溢出,服务器会把长时间没有活跃的 Session 删除。这个时间就是 session 的超时时间,过了超时时间,我们的 session 就会自动失效。

Cookie详解

Cookie概念

Cookie 可以翻译为 “小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好XXX,这会让我们感觉很亲切,就好像吃了一个小甜品一样。这其实是通过访问主机中的一个文件来实现的,这个文件就是 Cookie。在Internet 中,Cookie 实际上是指小量信息,是由 Web 服务器创建的,将信息存储在用户计算机上的文件。一般网络用户习惯用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 Session 跟踪而存储在用户本地终端上的数据,而这些数据通常会经过加密处理。

Cookie的不可跨域名性

很多网站都会使用 cookie,不同浏览器采用不同的方式保存 Cookie,而且每个网站的 Cookie 只能够被对应的网站使用。意思就是说当浏览器访问 Baidu 时,只会带 Baidu 的 cookie,而不会带其他网站的 Cookie,这就是 Cookie 的不可跨域名性。

Cookie 在客户端是由浏览器来管理的。浏览器可以保证各个网站只能操作各个网站的 Cookie,从而保证用户的隐私安全。

Cookie的内容

cookie 的主要内容包括名字,值,过期时间,域和路径。域和路径一起构成 cookie 的作用范围。cookie 如果不设置过期时间的话,则表示这个 cookie 的生命期为浏览器会话期间,关闭浏览器,这个 cookie 就会消失。这种生命期为浏览器会话期的 Cookie 被称为会话 cookie。会话 Cookie 一般不保存在硬盘上而是保存在内存里,这种行为并不是规范规定的。如果 Cookie 设置了过期时间,浏览器就会把 cookie 保存到硬盘上,即使浏览器关闭了,这些 cookie 还是会一直有效直到过了过期时间。

Cookie的修改和删除

Cookie 并没有提供修改和删除操作,要想修改某一个 Cookie 只需要新建一个同名的 Cookie,添加到请求里面去覆盖原来的 Cookie。删除也是如此,只需要将要删除的 Cookie 的过期时间设置成现在时间的之前就可以了,然后再覆盖原来的 Cookie。需要注意的是:要修改的和要删除 Cookie 的名字(name),域名(domain)和路径(Path)等除了值(value)和过期时间这两个属性之外必须和原来完全一样。否则,浏览器就会将请求里面的 Cookie 设为新的 Cookie,相当于覆盖失败,也就是删除和修改失败了。

cookie最典型应用

  1. 判断用户是否登陆过网站,以便下次登录时能够直接登录。如果我们删除 cookie,则每次登录必须从新填写登录的相关信息。
  2. 另一个重要的应用是 “购物车” 中类的处理和设计。用户可能在一段时间内在同一家网站的不同页面选择不同的商品,可以将这些信息都写入 cookie,在最后付款时从 cookie 中提取这些信息,当然这里面有了安全和性能问题需要我们考虑了。

Session和Cookie的区别

  1. cookie 数据存放在客户端,session 数据放在服务器上。
  2. cookie 不是很安全,别人可以分析存放在本地的 Cookie 并进行 Cookie 欺骗考虑到安全应当使用 session。
  3. session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用 Cookie。
  4. 单个 Cookie 保存的数据长度不能超过 4K,很多浏览器都限制一个网址最多保存 20 个 cookie。
  5. 将登陆信息等重要信息存放为 SESSION,其他信息如果需要保留,可以放在 COOKIE 中。
  6. Session 的运行依赖 Session ID,而 Session ID 是存在 Cookie 中的,也就是说,如果浏览器禁用了 Cookie,Session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 Session ID)。
嗨客网顶部