有没有办法在php中切换会话?
我在php会话中存储了大量数据并且存在许多溢出问题,所以现在第一个解决方案是以某种方式细分会话数据。例如:
//Uses session sector 1
switch_to_session('sector1');
$_SESSION['data1'] = 'tons of data'; //store data
//Uses session sector 2
switch_to_session('sector2');
$_SESSION['data1'] = 'another data';
//Return to sector 1
switch_to_session('sector1');
echo $_SESSION['data1']; //prints: 'tons of data'
这可能吗?提前谢谢......
答案 0 :(得分:6)
虽然我怀疑有更好的方法可以做你想做的事情 - 严格回答你的问题:是 - 你可以切换会话。
诀窍是保存并关闭现有会话,然后识别新会话,然后启动它。
示例:
<?php
session_start(); // start your first session
echo "My session ID is :".session_id();
$sess_id_1 = session_id(); // this is your current session ID
$sess_id_2 = $sess_id_1."_2"; // create a second session ID - you need this to identify the second session. NOTE : *must be **unique** *;
$_SESSION['somevar'] = "I am in session 1";
session_write_close(); // this closes and saves the data in session 1
session_id($sess_id_2); // identify that you want to go into the other session - this *must* come before the session_start
session_start(); // this will start your second session
echo "My session ID is :".session_id(); // this will be the session ID that you created (by appending the _2 onto the end of the original session ID
$_SESSION['somevar'] = "I am in session 2";
session_write_close(); // this closes and saves the data in session 2
session_id($sess_id_1); // heading back into session 1 by identifying the session I you want to use
session_start();
echo $_SESSION['somevar']; //will say "I am in session 1";
?>
最后 - 将所有内容整合到您想要的功能中:
<?php
function switch_to_session($session_id) {
if (isset($_SESSION)) { // if there is already a session running
session_write_close(); // save and close it
}
session_id($session_id); // set the session ID
session_start();
}
?>
这应该可以解决问题。
注意 至关重要您的会话ID是唯一的。如果不这样做,宝贵的用户数据将面临风险。
为了让生活更加复杂,您还可以为切换到的每个会话更改会话处理程序(会话数据的存储方式)。如果您正在与第三方代码或系统进行交互,您可能会发现它正在使用不同的会话处理程序,这可能会使事情变得混乱。在这种情况下,您还可以获取/设置会话保存处理程序,并在开始下一个会话之前更改它。
答案 1 :(得分:2)
不是您问题的直接答案..
如果您需要存储 多个数据,那么您需要使用不同的存储方法 - 最好是数据库,文件或缓存存储区。
在会话本身中,您应该存储对数据的引用 - 文件名,数据库主键或缓存键。
AFAIK你不能'切换'会话。
答案 2 :(得分:0)
即使您在此处拥有所有文档: http://www.php.net/manual/en/book.session.php
我不知道您在会话中尝试保存哪些数据,但在会话中您可以放置一个“标记”,您可以使用该标记将数据和列表拆分为PHP。
实施例
<?php
session_start();
$_SESSION['data1'] = 'Hello my friend!|My friend is the best!';
$split=explode('|', $_SESSION['data1']);
echo $split[0].'<br>'; // Hello my friend!
echo $split[1]; // My friend is the best!
?>