【问题标题】:multiple sessions on one web application一个 Web 应用程序上的多个会话
【发布时间】:2014-03-04 19:36:12
【问题描述】:

我知道我可以使用$oldSession = session_name("mySessName"); 来设置会话的名称,我喜欢这样做:

# FileName: sessionTest.php
$old_name = session_name("TEST");
session_start();
$_SESSION["hi"]="hi";
print_r($_SESSION);

我什至可以拥有另一个文件:sessionTest1.php,其中包含以下内容:

# FileName: sessionTest.php
$old_name = session_name("TEST1");
session_start();
$_SESSION["Bar"]="bar";
print_r($_SESSION);

我可以在 sessionTest.php 和 sessionTest1.php 之间来回切换,而 session 只会有对应的变量。

我遇到的问题是假设一个不同的脚本已经启动了一个会话,然后调用这个文件。我所看到的是假设我有:

session_name("other");
session_start();
$_SESSION["foo"] = "foo";
require_once "sessionTest.php";
print_r($_SESSION);

这是打印Array( "foo" => "foo", "hi" => "hi" )。有没有办法结束上一个会话并重新开始我的会话。注意:我不想破坏之前的会话,因为其中可能包含有价值的信息。

【问题讨论】:

  • 我认为session_name() 是您正在寻找的功能。
  • 我在上面使用 session_name。

标签: php session


【解决方案1】:

我所做的是让我的 SESSION 1 层比标准更深。所以我可以使用数组的那一层。

某个页面:

 <?php 
       $_SESSION['myApp1']['hi'] = "Hi";
  ?>

其他页面:

 <?php
      $_SESSION['myApp2']['ciao'] = "Ciao";
 ?>

所以当我想在第 2 页上查看会话变量时,我只是

<?php
     echo "<pre>";
     print_r($_SESSION['myApp2']);
     echo "</pre>";

 ?>

【讨论】:

  • 这是一个很好的解决方案......它仍然容易受到在 $_SESSION 变量底层使用相同应用程序名称的每个应用程序的攻击,这可能会覆盖数据。我知道 session_name 允许您拥有自己的会话环境,但如果 session_start 已经被调用,它似乎不起作用。
【解决方案2】:

在 session_start 之前使用 session_name。

PHP session_name

会话名称在请求启动时重置为存储在 session.name 中的默认值。因此,您需要为每个请求调用 session_name()(在 session_start() 或 session_register() 被调用之前)。

阅读这个 SO 答案:

Multiple Sessions

【讨论】:

  • 是的,我知道这一点...我在会话开始之前使用 session_name,但是如果另一个页面包含我的并且已经开始会话怎么办。所以问题变成了我如何结束(但不破坏)上一个会话,以便我可以命名和开始我的会话。我也试过 session_write_close() 没有成功。
  • 我在发帖前阅读了这个问题。如果 app1 和 app2 交互,该解决方案将不起作用。如果加载此页面时未启动会话,则它可以正常工作。如果会话已经开始,session_start() 似乎什么都不做。
猜你喜欢
  • 2019-03-29
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 2012-05-04
  • 2016-05-11
  • 2019-06-13
  • 1970-01-01
  • 2015-01-19
相关资源
最近更新 更多