cookie与session区别及cookie禁用后如何使用session

  • cookie
    http请求是无状态的,即使第一次和服务器建立连接并成功登录后,第二次请求,服务器依然不知道当前请求是哪个用户,cokkie解决了这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,浏览器保存在本地,当该用户发送第二次请求的时候就会自动的把上次请求存储cookie携带给服务器,服务器就可以判断是哪个用户了。
    cookie存树的数据量有限,不同浏览器存储数据量大小不同,一般不超过4KB

  • session
    Session,储存于服务器端(默认以文件方式存储Session),根据客户端提供的Session ID来得到用户的文件,取得变量的值,Session ID可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,Session ID是取得存储在服务上的Session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个Session文件,随之也产生了与之唯一对应的一个Session ID,定义Session变量以一定形式存储在刚才产生的Session文件中。通过Session ID,可以取出定义的变量。跨页后,为了使用Session,你必须又执行session_start();将又会产生一个Session文件,与之对应产生相应的Session ID,用这个session id是取不出前面提到的第一个Session文件中的变量的,因为这个Session ID不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的Session文件,直接读取与这个id对应的Session文件。
    作用和cookie类似,都是用来存储用户相关信息,不同的是cookie存储在本地浏览器,而session存储在服务器(默认以文件方式存储),更加安全,不易被窃取,但是弊端就是占用服务器资源
    cookie中有:键,值,过期时间,路径和域;一般不保存在硬盘,存在内存里,若设置了过期时间,就会保存在硬盘里

  • cookie和session结合使用

    • 存储在服务端,通过cookie存储1个session_id,具体数据则保存在服务器中
    • 将session数据加密保存在cookie中,flask就是这种方式
  • cookie禁用后如何使用session?
    为什么禁用Cookie就不能得到Session呢?因为Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。

    Session的存储方式:
    session其实分为客户端Session和服务器端Session。
      当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识。SessionID是一个由24个字符组成的随机字符串。用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端。这个SessionID就是保存在客户端的,属于客户端Session。
      其实客户端Session默认是以cookie的形式来存储的,所以当用户禁用了cookie的话,服务器端就得不到SessionID。这时我们可以使用url的方式来存储客户端Session。也就是将SessionID直接写在了url中,当然这种方法不常用。
      解决方法:
       1. 设置php.ini配置文件中的“session.use_trans_sid = 1”,或者编译时打开打开了“–enable-trans-sid”选项,让PHP自动跨页传递Session ID。
       2. 手动通过URL传值、隐藏表单传递Session ID。
       3. 用文件、数据库等形式保存Session ID,在跨页过程中手动调用。

上面的3个方法有一个共同点,就是在前一页取得Session ID,然后想办法传递到下一页,在下一页的session_start();代码之前加代码Session ID(传过来的Session ID)。
参考链接:https://www.cnblogs.com/tkzc2013/p/9875745.html

猜你喜欢

转载自blog.csdn.net/qq_41386300/article/details/89342662