Cookie,Session验证机制

cookie可分为两类:会话cookie和持久cookie
会话cookie是一种临时cookie,在用户退出浏览器时,会话cookie就会被删除,也就是所说的sessionid,通过 SESSION[userinfo]= user;这样添加
主要用来判断用户的所有操作是否合法,避免用户每次都需要重新登录验证
新开一个浏览器,整个浏览器的所有窗口都公用一个sessionid,无论是新开窗口,还是重新再次开启浏览器进程,只要之前的浏览器不关闭,就一直是一个sessionid(前提是访问同一台服务器)
在一个浏览器中,访问一台服务器下apache下的任何工程文件,只要浏览器不关闭,所有的工程,页面用的都是一个sessionid,在浏览器关闭后,再次访问改服务器,会重新给其分配一个sessionid
这里写图片描述

那么服务器是怎么根据sessionid,判断用户的合法性?
在php+apache的模式下,服务器将session存储在/var/lib/php5/sessions下面,下面有一个与sessionid的同名文件

例如在工程1下面我们使用 SESSION[userinfo]= user;存储session,我们通过浏览器访问工程1,在服务端可以打开session文件可以看到服务器存储session的格式
这里写图片描述
在工程2下面我们使用 SESSION[user]= user;存储session,访问工程1的浏览器中新建窗口访问工程2,在服务端可以打开session文件可以看到服务器存储session的格式
这里写图片描述

发现使用同一浏览器,在访问同服务器下不同工程时,使用的是同一sessionid,也就验证了上述的,一个浏览器在访问同一服务器时,这个浏览器会被分配一个sessionid,在不关闭浏览器
的情况下,访问这个服务器的任何文件,都是这一个sessionid,当然在关闭浏览器后,再次访问服务器会又重新分配一个sessionid

那么到之前的问题,既然一个浏览中所有窗口都用同一个sessionid,那岂不是很不安全,并不是这样的
1,在浏览器访问工程1时,浏览会检测本地有没有对应我们要访问服务器的sessionid,有的话就通过http头的cookie字段发送过去,没有的话就不发送,在我们首次发送时,字段为空
2,服务端根据cookie字段,字段为空,则服务器会生成一个sessionid发送给客户端,并在session文件中添加我们user_info这个字段
3,在我们成功访问工程1后,我们再在浏览器新开的窗口中去访问工程1,http头的cookie字段将sessionid发送过去,服务端到存储session的目录中查找与sessionid同名
的文件,查找成功后,服务端通过empty($_SESSION[‘user_info’]);判断session中是否存储了user_info这个字段,若session中有这个字段,则表明
判断成功,用户是一个合法用户,否则判断用户不合法

4.在同一浏览中我们新建窗口去访问工程2,此时浏览会将工程1中的sessionid发送个服务端
5.服务端会根据这个sessionid找到了session文件,但服务器在验证empty($_SESSION[‘user’])会发现找不到,所以验证失败,跳转到工程2的登录页面
6。在工程2的登录页面,我们成功登陆,然后我们再去服务器保存session的目录下打开session文件,会发现有一个新加的user字段

在工程1中是通过 SESSION[userinfo]= user;存储session,在工程2中通过 SESSION[user]= user;存储session
但我们在工程1和2中都通过 SESSION[userinfo]= user;存储session,可以发现在成功登陆工程1后,再在浏览器中登陆工程2发现不用登陆

这里可以说说两个不同的系统,从一个系统跳转到一个系统时,直接跳过第二个系统的登录页面
前提
1,系统1和系统2的用户名,密码是通用的,即用户可以登录系统1,也可以登录系统2
方法一:直接传递用户名名,密码给系统2的验证函数
方法二:系统1和系统2使用相同的session名字,即系统1登录成功后,系统2通过取出相同的session名完成验证

持久cookie是将客户的大部分信息存储在客户端
持久cookie在关闭浏览器,或者关闭系统后都不会消失,除非时间过期
通过setcookie(‘auth’,” identifier: token”,$timeout);设置cookie
浏览会为访问不同的url生成不同的cookie,无论是否是同一浏览器还是同一服务器,这和session不同
这里写图片描述
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值