booleans在session_regenerate_id()中有什么用?

时间:2015-08-05 09:18:03

标签: php session

抱歉,如果我听起来太天真,我的问题是实际上BooleanTrue& False用于session_regenerate_id()

根据php.net,我可以得到这个解释,

  

bool session_regenerate_id([bool $ delete_old_session = false])

     

session_regenerate_id()会将新会话ID替换为当前会话ID   一,并保留当前的会话信息。

delete_old_session 是否删除旧的关联会话文件。

所以基本上当我们将True传递给session_regenerate_id()时,它会删除与此相关的旧Session值吗?

所以我尝试使用下面的代码行来测试它,

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
error_reporting(-1);

session_start();

echo 'Initial Session ID ::'. session_id().'<br>';

$_SESSION['test'] = 'ok'; //set a session value

session_regenerate_id(false); // true or False what  difference does it make ?

echo 'New Session ID with FALSE param during regenaration ::'.session_id().'<br>';

echo 'IS SESSION EXIST ? <br>';

print_r($_SESSION);

echo '<br>';

session_regenerate_id(true); // true or False what  difference does it make ?

echo 'New Session ID with TRUE param during regenaration ::'.session_id().'<br>';

echo 'IS SESSION EXIST ? <br>';

print_r($_SESSION);

echo '<br>';

exit;

输出

Initial Session ID ::2du1rt3c5ou01db2ruvr32qli7
New Session ID with FALSE param during regenaration ::epid6rhi2k9cfthdrh69udqlk1
IS SESSION EXIST ?
Array ( [test] => ok )
New Session ID with TRUE param during regenaration ::4o766kh2g4eae8vlqupnkmmer5
IS SESSION EXIST ?
Array ( [test] => ok ) 

在我的情况下,我可以看到True or False没有更改已设置的会话值的行为,它只会更改session的ID。

我的代码或理解有问题吗?

编辑2:如果我想使用自己的会话ID(自定义生成)初始化会话(第一次用户访问时),那么正确的方法是什么?

这种做法有什么用?

    session_start();
    //Create new session without destroying the old one
      session_regenerate_id(false);

   //Grab current session ID and close both sessions to allow other scripts to use them
      $newSession = session_id();
      session_write_close();

   // Set session ID to the new one, and start it back up again
      session_id($newSession);
      session_start();

2 个答案:

答案 0 :(得分:3)

参考仅讨论会话文件。

因此,如果您将TRUE传递给session_regenerate_id(),会立即删除会话文件(由临时/会话目录中某处的PHP管理),而不是等待垃圾回收。

答案 1 :(得分:1)

从这里采取:http://php.net/manual/en/function.session-regenerate-id.php

  

bool session_regenerate_id([bool $ delete_old_session = false])

delete_old_session

Whether to delete the old associated session file or not.

删除与会话关联的旧文件。它意味着会话不会破坏,它只是删除旧文件。 销毁:session_destroy()或只是空$ _SESSION = [];

如果您的网站有高负载,我建议您使用apc,memcache,redis进行会话并忘记文件。因为使用文件操作会在服务器的磁盘驱动器上产生IO负载。

ini_set('session.save_handler', 'memcache'); // memcache
ini_set('session.save_handler', 'mm'); // shared memory