Session
Session的实现方式有两种:使用URL重写,或者使用cookie
URL重写:每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。
Cookie 来实现Session跟踪的,第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
session 过期时间为 0,不需要考虑。
session采用发呆时间,默认是用户不操作超过20分钟即失效。
Cookie
HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息(key-value格式)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
cookie属性项:
NAME=VALUE: 键值对,可以设置要保存的 Key/Value,注意这里的 NAME 不能和其他属性项的名字一样
Expires: 过期时间,在设置的某个时间点后该 Cookie 就会失效
Domain: 生成该 Cookie 的域名,如 domain=“www.baidu.com”
Path: 该 Cookie 是在当前的哪个路径下生成的,如 path=/wp-admin/
Secure: 如果设置了这个属性,那么只会在 SSH 连接时才会回传该 Cookie
cookie一般分两种。1.不设置过期时间,会存在内存里,浏览器关闭即失效。2.设置过期时间,会存在硬盘里,一直到过期时间才失效。
Session和Cookie的区别
1,session 在服务器端,cookie 在客户端(浏览器)
2,session 默认被存在在服务器的一个文件里(不是内存)
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
4,session 可以放在 文件、数据库、或内存中都可以。
5,用户验证这种场合一般会用 session
Session | Cookie | |
---|---|---|
存放位置 | 服务器 | 客户端(浏览器) |
运行方式 | 1、session id(存在cookie中) 。2、使用url重写(url后加sid) | |
过期时间 | 0,默认不操作20分钟失效 | 1、不设置过期时间,浏览器关闭失效。2、设置过期时间,直到过期时间失效 |
安全性能 | 存储在服务器,安全 | 存储在客户端,可能会被抓取,篡改(cookie欺骗,cookie截获) |
使用场景 | 用户验证 | 浏览器记录密码 |
因此,维持一个会话的核心就是客户端的唯一标识,即 session id