首页 > 解决方案 > 会话管理系统

问题描述

我正在创建自己的会话管理系统,我想在使用 session_create_id() 函数开始会话之前创建自己的自定义 ID,虽然我不确定前缀是如何工作的,但我遇到的问题是我用前缀回显 session_create_id 我将看到带有会话 ID 的前缀,尽管当我将此 session_create_id 输入到 session_id 函数中时,我在回显时只看到标准的 26 长度 ID。我在https://wiki.php.net/rfc/session-create-id上找到的这篇文章确实解释了为什么我只看到我在配置文件中设置的标准长度。但我不确定我是如何知道这个前缀存在的,本质上它是否真的添加了一个更安全的 session_id。

这篇文章中的这些信息满足了我的一些好奇心。

注意:前缀长度不被视为 session.sid_length 的一部分。会话 ID 长度变为“前缀长度”+ session.sid_length。总长度必须小于 256 个字符。

代码:

//SessionRegeneration
function sess_regenration(){
  if (session_status() == PHP_SESSION_NONE){

    //CreateRandomStringForPrefix
    $RandomizerForPreFix = str_split("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
    shuffle($RandomizerForPreFix);
    $EmptyStringToAppenRandomizer = '';
    foreach($RandomizerForPreFix as $Element ){
     $EmptyStringToAppenRandomizer .= $Element;
   }
    //CreateNewSessionIdWithPrefix
    $CreatedId = session_create_id($EmptyStringToAppenRandomizer);
    session_id($CreatedId);
    //StartSession
    session_start();
    echo session_id();
  }

}  

标签: phpsecuritysession

解决方案


我刚刚意识到,为了使用 session_create_id() 功能,我必须关闭严格模式,虽然现在我会遇到未经授权的会话 ID 的问题......无论如何能够创建这个会话 ID 并且仍然不允许未经授权的会话。


推荐阅读