巧谈Session和Cookie的区别

个人对于Session和Cookie的理解

一、简单回答

cookie 和 session 都是会话技术, 能够存储交互中的信息.

1. 存储位置不同:
   cookie是存储在客户端中,每次访问服务器时,都会带着当前域名下的cookie,而 
   session是存储在服务器端,占用服务器资源(session可以存储任意类型的数据,但是 
   cookie只能存储字符串)
2. 存储限制不同:
   浏览器对cookie有个数限制,一般为单个域名最多存储50个,单个cookie最大值一般为 
   4k,而session没有限制
3. 安全性方面:
   cookie的数据存储在客户端,容易被编辑伪造,所以相对来说不是特别的安全
4. 请求速度方面:
   因为cookie每次都会传递给服务器,所以如果写入的cookie数据较多,就会导致报文提及 
   增大,影响请求速度,而session是通过sessionid来识别的,所以影响不大。
5. 生命周期方面:
   cookie的失效时间是即时的,但是session的失效时间是一定概率触发的,php默认的概 
   率是1/1000,生命周期是24分钟。

二、深入回答

cookie 和 session 都是会话技术, 但是二者实现会话的原理不同
1. 原理不同

   cookie 实现会话的原理, 是每次都会将 cookie 值存放在HTTP请求报 
   文的请求头中, 服务器可以接收到报文中的参数. 比如用户 id 和用户 
   名.
   session 实现会话的原理, 客户端请求服务器的时候, 检测请求中是 
   否存在 session 对应的 cookie, 该cookie的默认名字为 PHPSESSID, 
   如果不存在则生成一个随机的字符串, 并生成相应的文件,进行session 
   数据的读写, 最后将该随机字符串写入到客户端的cookie中, 如果存在 
   则可以直接读取和写入数据.
2. 安全问题

   session 和 cookie 都存在一定的安全问题, 因为两者都是基于 HTTP 
   请求的, HTTP 请求一旦被截获, 那么都会造成数据的丢失和一定程度的 
   泄漏, 建议服务器配置 HTTPS 证书, 这样能有效的防止数据泄漏, 并 
   且对 cookie 的数据进行加密处理, 不要明文传递
3. session 的跨服务器问题 (session共享)

   PHP 语言默认存储 session 的位置是在 tmp 目录下, 在服务器集群中 
   就会出现 session 共享的问题, 每个用户的 session 会存储在不同的 
   服务器下, 就会导致下次登录时, 可能得不到自己的 session, 此时可 
   以将 session 存储到一台单独的服务器下, 用 mysql 或者是 redis 
   保存, 每台服务器都到该服务器下写入和读取 session 即可.
6.cookie和session的区别(如何设置cookie的失效时间,sessionid存储 
  在哪里)

  1)创建:浏览器第一次访问服务器会在服务器端生成一个session, 
  sessionid第一次产生是在 直到某server端程序调用 
  HttpServletRequest.getSession(true)这样的语句时才被创建。

  2)删除:超时;程序调用HttpSession.invalidate();程序关闭;

  3)session存放在哪里:服务器端的内存中。不过session可以通过特殊 
  的方式做持久化管理(memcache,redis)。

  4)session会因为浏览器的关闭而删除吗?不会,session只会通过上面 
  提到的方式去关闭。

  5)设置cookie:setcookie()函数 setcookie("user", "Alex Porter", 
  time()+3600);
 
  6)取回cookie:用$_COOKIE['user']

  7)设置session:必须先启动会话,session_start() 函数必须位于 标 
  签之前$_SESSION[]

  8)删除session:session_destroy();session_destroy() 将重置 
  session,您将失去所有已存储的 session 数据。 
  unset($_SESSION['name'])

本文为作者原创或转载,允许转载,由骚杨在luckyy.vip发布 转载请说明文章出处。

2+
Avatar

作者: 骚杨

本站总访问量:40,008 次