天天看点

Session以及模拟会话机制

初学者对session总是不明白咋回事,这篇文章将阐述这个问题,并且实操模拟会话机制。

1,Session实质是啥? ==存贮在服务器端硬盘中的session文件,一个session一个文件。

文件名:32位随机编码字符串如服务器/tmp目录下【/tmp /sess_01aab840166fd1dc253e3b4a3f0b8381】

格式:变量名 | 类型 | 长度 | 值

具体看文章:https://blog.csdn.net/yt_php/article/details/80464890

注:当然你也可以数据库建个Session表存session,(站点访问量很大的情况下)

2,Session的产生?

针对http局限性(无状态无记忆)-提出的保持(客户端<--->服务器)保持连接状态的机制。

3,原理?

Session储存于服务器端(默认以文件方式存储session),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。 按照上面的思想,我只要把session_id存在在cookie中就可以正常使用session了。

注:sessionID 是识别用户的,这个用户的意思不是你登陆网站的用户名,这个要搞清楚!这个ID是你的电脑配置、浏览器版本等等组成的信息,它是唯一的.你在你家打开360浏览器访问了一个网址,这个网址就会传给你一个ID,保存在你浏览器的COOKIE里,ID就是唯一的你的身份,同时网址服务器给你开辟了一块数据区域叫SESSION,下次访问这个网址会带着这个ID,服务器就可以找到属于你的数据区域,存或者取session数据。

4,禁用cookie模拟会话

代码补充:

$sname = session_name();//session名 何处打印都是一样的

//如果服务器给我传递了ID

if( isset($_GET[$sname]) ){

$sid = $_GET[$sname];

echo "<a href=sever.php?id=".$sid.">我已接收id,再次发送请求</a>";

}else{

//初次访问

echo "<a href=sever.php>初次访问</a>";

}

ini_set('session.gc_maxlifetime', 3600);

if(!isset($_GET['id'])){

session_start();//执行此句 开辟一个新的用户区域

$a = session_name();

$b = session_id();//q8k57hmtu6eci6jlaj75kidt21

$_SESSION['user'] ='myinfo';//给这个用户存入标识信息

echo "<a href=client.php?$a=".$b.">给你发送Session_id</a>";

}

if(isset( $_GET['id'] ) ){

session_id($_GET['id']);//先指定哪个用户的session

session_start();//打开这个用户的session

if($_SESSION['user'] == 'myinfo'){

echo "我认得你!"; //取出来了

}

}