在会话之间切换

时间:2014-03-17 16:59:08

标签: php session

有没有办法在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'

这可能吗?提前谢谢......

3 个答案:

答案 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!
?>

http://www.w3schools.com/Php/php_sessions.asp