Php 一个web应用程序上的多个会话

Php 一个web应用程序上的多个会话,php,session,Php,Session,我知道我可以使用$oldSession=session_name(“myessname”)设置会话的名称,我非常喜欢: # FileName: sessionTest.php $old_name = session_name("TEST"); session_start(); $_SESSION["hi"]="hi"; print_r($_SESSION); 我甚至可以有另一个文件:sessionTest1.php,其中包含以下内容: # FileName: sessionTest.php $

我知道我可以使用
$oldSession=session_name(“myessname”)
设置会话的名称,我非常喜欢:

# 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_name("other");
session_start();
$_SESSION["foo"] = "foo";
require_once "sessionTest.php";
print_r($_SESSION);

这是打印数组(“foo”=>“foo”,“hi”=>“hi”)。是否有方法结束上一个会话并重新开始我的会话。注意:我不想破坏上一个会话,因为其中可能包含有价值的信息。

我要做的是使会话1层比标准层更深。所以我可以使用数组的那个层

一些页面:

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

另一页:

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

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

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

 ?>

在会话开始前使用会话名称

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

阅读以下内容,然后回答:


我认为
session\u name()
是您正在寻找的函数。我正在使用上面的session\u name。这是一个很好的解决方案。。。在$会话变量的底层使用相同的appname的每个应用程序仍然容易受到攻击,这可能会覆盖数据。我知道session_name允许您拥有自己的会话环境,但如果session_start已被调用,则它似乎不起作用。是的,我知道这一点。。。在会话开始之前,我正在使用session_name,但如果另一个页面包含我的页面,并且已经开始了会话,该怎么办。因此,问题变成了如何结束(但不销毁)上一个会话,以便命名和启动会话。我试过session\u write\u close()也没有成功。我在发布之前读过这个问题。如果app1和app2相互作用,该解决方案将不起作用。如果加载此页面时未启动会话,则可以正常工作。如果会话已启动,则session_start()似乎不起任何作用。