如何在不同的选项卡中使用不同的会话

时间:2016-08-31 13:42:33

标签: php session

我需要为用户打开的每个标签创建一个会话。有人会说这是不可能的,因为会话存储在cookie中,而cookie不能识别标签和所有这些。

但有一篇关于PHP手册的评论让我觉得可能有可能,我只是不确定如何做第二部分。但是,让我们从头开始。

因此,我们的想法是根据唯一ID创建不同的Session_names,然后通过URL传递所有这些内容。所以它是这样的:

if(!preg_match('/^SESS[0-9]+$/',$_REQUEST['SESSION_NAME'])) { 
                        $_REQUEST['SESSION_NAME']='SESS'.uniqid(''); 
                    } 
                output_add_rewrite_var('SESSION_NAME',$_REQUEST['SESSION_NAME']); 
                session_name($_REQUEST['SESSION_NAME']);

所以,到目前为止,我正在生成唯一ID。问题是,如何将此ID传递到我的标签上?通过URL?即便如此,我如何将其插入我的网址?评论者指定了这样的内容:

< ?php 
header('location: script.php?'.session_name().'='.session_id() 
      . '&SESSION_NAME='.session_name()); 
?> 

<input type="image" src="button.gif" onClick="javascript:open_popup('script.php?<?php 
echo session_name(); ?>=<?php echo session_id(); ?>&SESSION_NAME=<?php echo session_name(); ?>')" />

但我不知道如何在我自己的网站上实现这一点。我需要将它传递到这个页面上(我通过js打开)

document.getElementById("details").action = "../details.php?tipo=" + tipo + "&periodo=" + periodo;

那么如何将会话信息添加到此URL?

编辑:我需要在每个标签上设置不同的会话,因为每个标签都可以将其信息导出到另一个页面,然后导出到excel文件。该部分工作正常,但如果用户同时打开两个页面,则只会通过会话传递最新的一个页面。

1 个答案:

答案 0 :(得分:1)

你的方法对于这项任务来说有点过于复杂。

您可以将嵌套数组存储在会话变量中,而不是乱搞变量,尝试存储随机内容重写变量。

例如,在用户启动的页面上,执行类似

的操作
$_SESSION['<random_string>']=array();

然后将此随机字符串的值存储在一个“隐藏”输入字段中。

无论何时提交表单,或者您需要对会话变量进行任何类型的操作,请执行

if($_POST['action']=='Buy_bananas')
{
if(isset($_SESSION['<string>']))
{
buy($_SESSION['<string>']['bananas_to_buy']);
}
else
echo "Stop breaking code";
}