初学者对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模拟会话
代码补充:
/**
* 客户端
* 关闭浏览器的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>";
}
/**
* 服务器端
* 关闭浏览器的cookie
*/
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 "我认得你!"; //取出来了
}
}