session与cookie
sessionid
session是存放在服务端的。当浏览器发起第一次请求,服务端会自动生成一个sessionid ,通过响应头发送给浏览器,浏览器再把sessionid存起来,下次请求的时候会带上sessionid,服务端会根据上传的sessionid去查找对应session
sessionid 是如何在客户端和服务端传递的?
服务器初次创建session的时候后返回session到客服端(在返回头(response)中有setCookie),浏览器会把sessionname->sessionid存到cooike中,同path下再次请求服务器时,会自动在请求头中带上cooike信息,服务器可以在_COOKIE中得取到想要的session会话跟踪
记录会话信息的技术成为会话跟踪。常见的会话跟踪技术有Cookie、URL重写、隐藏表单域、Session.
session与cookie
cookie
cookie是保存在客户端的一些信息,分为:
会话cookie(临时)
临时数据,存放在浏览器内存中,当关闭浏览器后cookie删除
磁盘cookie(有过期时间)
持久化数据,以磁盘文件格式存放在系统磁盘中,不会随着浏览器关闭而删除,只有当设置的过期时间到的时候或者手动删除,才会被删除。
cookie具体操作
1. 客户端发出http请求(不包含cookie信息)
2. 服务器发出的响应中包含set-cookie,来通知客户端保存cookie信息。
3. 客户端收到响应,保存好cookie信息后,再在发出的http请求中加入cookie字段信息(包含设置指定的字段信息,不是全部账号密码信息)。
4. 服务器根据收到的请求,将cookie中的信息与之前的记录进行对比进行认证。安全性
1.cookie信息添加在http请求头中,明文传输,有一定风险。
2.cookie的大小限制为4kb,一些复杂数据需求不适合
session
session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。但程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否包含了一个session标识 —— 称为session id。session存放在哪里
服务器端的内存中。不过 session 可以通过特殊的方式做持久化管理(memcache,redis)
session在下列情况下被删除:
1.程序调用HttpSession.invalidate()
2.距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间
3.服务器进程被停止
php操作session、cookie
一个利用session进行登录验证的简单例子
使用tp5框架
简单的登录页面
1 | <div class="login"> |
登录操作
1 | public function login_test(){ |
登出操作
1 | public function logout(){ |
登陆 , login_test 用session保存了用户名,并且session会自动产生一个sessionid,返回给前端,前端再保存到cookie中
页面跳转后打印一下 请求数据发现 客户端把自己的sessionid通过cookie附在了http请求中
这时服务端就能够通过这个sessionid 来比对服务端自己存起来的sessionid 来判断是哪个用户 以及其状态等;就可以进行一些比如退出等操作。
利用cookie存放数据
后端可以利用cookie让前端存一些内容,但是不安全
1 | public function login_test(){ |