cookie 和 session 的关系

  • 简介
    session,和cookie是一种存储数据的机制。
    cookie的数据是存在客户端的,可以设置失效时间。默认关闭浏览器自动失效,如果设置了失效时间,即使关闭了浏览器cookie仍然会保留直到到期。
    session的数据是存在服务器端的,既可以以文件的形式存到服务器上,也可以存到redis、memcached、SQLite。
    下图是项目里面的session 文件。
    这里写图片描述
    它不是一个单一的文件,而是一大堆文件。sess_后面的是session_id
    http是无状态协议,一旦数据交换完毕,客户端与服务器端的链接就会关闭,再次交换数据需要建立新的链接。
    那么用户登录成功之后,浏览器再向服务器请求数据是怎么知道这是哪个登陆的用户发的请求呢?这时候session_id就起到关键的作用了。
    只要每次请求的时候,服务器调用了session_start(),就会自动从GET或者POST或者cookie参数里面找PHPSESSID【当然,这个名字是可以在服务器的php.ini文件里面
    服务器配置文件里面设置session.name
    或者在代码里通过ini_set("session.save_path", "my_PHPSESSID");来修改】,然后找到对应的文件,读取登录成功时存到里面的用户信息。
    如果GET,POST,cookie里面都没有PHPSESSID,服务器就会自动生成一个PHPSESSID存到浏览器的cookie里面。所以只要cookie里面的PHPSESSID是一致的,对应的就是同一个Session。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session

当会话自动开始或者通过 session_start() 手动开始的时候, PHP 内部会调用会话管理器的 openread 回调函数。 会话管理器可能是 PHP 默认的, 也可能是扩展提供的(SQLite 或者 Memcached 扩展), 也可能是通过 session_set_save_handler() 设定的用户自定义会话管理器。 通过 read 回调函数返回的现有会话数据(使用特殊的序列化格式存储), PHP 会自动反序列化数据并且填充 $_SESSION 超级全局变量。

  • 服务器操作cookie和session
    PHP提供了大量的预定义变量,其中就有 $_SESSION $_COOKIE

打印$_SESSION可以看到本次链接的session_id对于的session数据
打印$_COOKIE可以看到本次链接请求发送时浏览器的cookie,它和请求头里面的cookie是一致的。
setcookie(‘cookie_name’,’cookie_value’); 在服务器端设置浏览器的cookie【在第一次请求时,服务器上的代码里先setcookie ,然后打印立刻$_COOKIE 是看不到刚刚设置的cookie 的,只有在下一次请求才能看到】。
设置cookie demo
第一次的头文件
第二次的头文件

  • 用途:
    登陆功能【登录成功后将用户信息存到cookie里面】
    长时间无操作自动下线功能【cookie的默认生命周期是到关闭浏览器,在保证session生命周期持久的情况下,只有关闭浏览器以后再重新访问才需要登录,一般情况下一直打开页面放在一边是不会掉线的。我们可以在每次请求时,往session里面记录当前请求时间,如果上次请求时间相隔太远,就清除登录信息】
    保存用户浏览信息【保存用户的浏览记录什么的,保存购物车信息之类的】
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值