联系QQ 284710375
首页 > 技术分享 > 原生PHP
收藏

对于启动session的进一步理解(多为跨域使用)2021-11-05 15:36:59

大潇博客 原创文章,转载请标明出处

session会话机制,常用来做用户登录状态验证,偶尔也用作信息临时存储


大部分对于session的理解较为基础,比如下面常用的方法:

session_start();  //开启session()

$_SESSION['name']="name保存在session中";  //赋值

echo $_SESSION['name'];  //输出session

session_destroy();  //清除所有session

...


这些方法只针对同域,假如涉及到跨域时,每次会话请求,需要通过首次会话生成的session_id,再次启动会话

session_start($session_id);  //session_id为客户端指定


上文的session_id需要通过传递才可以,可以当做参数,也可以放到header中等等


假如不想每次都明文传输session_id,还有没有办法回到指定会话呢?启动会话前,通过PHP的“ini_set”函数设置session_name的值,可以通过下面这段话理解(摘自网络),非常有用,一定要仔细阅读理解

首先访问开启session的程序后,在Cookie中会新建一个值,键名为PHPSESSID,键值为一串随机的字符串,其中键名是由session.name决定的,如果不设置,默认为PHPSESSID

新建了一个session之后,服务器会将会话信息存储在tmp目录中,文件名为PHPSESSID_<'value>,其中value的值即为浏览器中PHPSESSID的值

在这个文件中,会将session信息分为两部分存储,一个是服务器代码中设置session的键名,另一个为session的键值,中间用竖线|隔开


为此,我特意做了个测试

直接访问一个页面,开启session,并赋个值

ini_set('session.name', 'PHP_SID');

session_start();

$_SESSION['test']='session测试';

echo session_id();

var_dump($_SESSION);exit;


然后注释掉session赋值的代码,把上面的session_id存储到页面的cookie中,key为“PHP_SID”使用ajax请求此代码,请求时一定要携带cookie


这时就会看到上文session所定义的“session测试”

image.png

image.png


划重点:

实际本文所要说的,就是在开启session_start()之前,定义:ini_set('session.name','PHP_SID');

前端cookie中定义好“PHP_SID=session_id”

请求时携带cookie,这样即可找到已存在的会话


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311