session解析

#session解析

##http
Http是一种无状态性的协议。这是因为此种协议不要求浏览器在每次请求中标明它自己的身份,并且浏览器以及服务器之间并没有保持一个持久性的连接用于多个页面之间的访问。当一个用户访问一个站点的时候,用户的浏览器发送一个http请求到服务器,服务器返回给浏览器一个http响应。其实很简单的一个概念,客户端一个请求,服务器端一个回复,这就是整个基于http协议的通讯过程。

##cookie
Cookie(复数形态Cookies),中文名称为“小型文本文件”或“小甜饼”[1],指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。定义于RFC2109。是网景公司的前雇员卢·蒙特利在1993年3月的发明[2]。

浏览器中cookie
Alt text

##禁用cookie之后

当禁用cookie之后,浏览器进行网页的访问,cookie就不存在了,自然不能将session_id传入到服务端,服务端也就无法识别用户的身份。

这里面的核心问题其实跟cookie没关系,仅仅是session_id(用户身份标识)无法传输到服务端了。

那我们把session_id作为一个参数来看待,解决的问题的方案就出来了,手动的传输我们session_id到服务端就好了。

这就是url重写。不管是get 还是post 请求,根据业务相应的传输方案就好。

当前端里面的session_id,通过请求发送到服务器之后,php服务端处理方案是:

  1. 获取客户端传入的session_id,
  2. 设置session_id
  3. 即可正常的读取session内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
session_start();
session_id('020e163uku6ptt7cm6eoj50992');
var_dump($_SESSION);
if (empty($_SESSION['count'])) {
$_SESSION['count'] = 1;
} else {
$_SESSION['count']++;
}
?>
<p>
Hello visitor, you have seen this page <?php echo $_SESSION['count'].htmlspecialchars(SID); ?> times.
</p>
<p>
To continue, <a href="<?php echo "nextpage.php?". htmlspecialchars(SID); ?>">click here</a>.
</p>

上述代码

SID的session_id,在cookie被禁用的模式下,会自动被赋值
session_id($sid),通过手动设置session_id 既可以实现session的状态

##php 中的 session

php中session的位置可以进行配置:
session.save_path = “/tmp/session”

我使用的服务器,默认在/tmp里面
session在服务器上的实际存在情况
|字段|值|
|-:-|
|path |/tmp/sess_ucqqv1ej1lulttmste47hpuj56|
|info|$key\|type:len:"$value"\

参考文档:

SESSION 原理