PHP session_id()指定自定义会话id失败的原因

Nokia 发表于 2016/8/8 02:08 | 显示全部楼层 |阅读模式
php可以在调用session_start()之前调用session_id($id)来手动指定会话ID,也就是session id.
如果在session_start()调用之前没有手动通过session_id()指定session id,系统会自动生成一个会话ID,形如0sp04fnphu6qee9io0nj8oa1a6.如果调用了session_id($id)却没有将session id设置为$id,而且刷新一次会话ID变一次。
比如下面的代码,本来将会话ID修改成了wuxiancheng,但最得到的结果却是lr3iq4f0bpoprfn8d2rjnq7ig3这样的随机自动生成的字符串,而且每次刷新都会变成新的内容。
遇到session_id()失效时,检测php配置项session.use_strict_mode是否设置成了1,如果是1,改为0,重新启动服务器即可。
session.use_strict_mode为1开启了会话ID严格模式,此时PHP不接受自定义session id,给定自定义ID时,仍然生成新的会话ID,相当于直接忽略了session_id()变更会话ID这个过程。

  1. <?php
  2.         session_id('wuxiancheng');
  3.         session_start();
  4.         echo session_id();
  5. ?>
复制代码
PHP官方手册上面的原文如下
  1. session.use_strict_mode specifies whether the module will use strict session id mode. If this mode is enabled, the module does not accept uninitialized session ID. If uninitialized session ID is sent from browser, new session ID is sent to browser. Applications are protected from session fixation via session adoption with strict mode. Defaults to 0 (disabled).
复制代码

手机版|轻松E站

E-mail: OHCC@163.COM

快速回复 返回顶部 返回列表