如何将在同一服务器上运行的 2 个 PHP 应用程序与使用公共会话分开

How to separate 2 PHP apps running on same server from using a common session

提问人:vinai 提问时间:12/28/2022 更新时间:12/29/2022 访问量:96

问:

我有 2 个独立的 PHP 应用程序在同一个域服务器上运行:abc.com/demo 和 abc.com/live

在这两个应用程序中,几乎每个 PHP 页面上都有 session_start()。一旦单个用户与第二个应用交互,第一个应用就会冻结或停止工作。我认为两者都使用相同的会话 ID,这会导致此冲突。

我在PHP手册上读到指定PHP会话名称,例如

session_name("DEMO");

或 session_name(“直播”);可能会有所帮助。

我的问题是,我是否需要在两个应用程序中的每个PHP页面上指定session_name,或者仅在登录成功过程中首次创建会话时才需要。

请指教。谢谢。

PHP 会话

评论

0赞 Md Zahid 12/28/2022
我想知道你说的 2 个 PHP 应用程序是什么意思。
0赞 Top-Master 12/28/2022
@MdZahid无论真的是“2 个 PHP 应用程序”还是“同一个应用程序的生产模式”,答案都是一样的;

答:

2赞 Top-Master 12/28/2022 #1

“在每一个......页面“是正确的方法。

但是将其分离到另一个脚本中,并将其包含在其他脚本中。

因为您将会话命名为“DEMO”和“LIVE”, 也许将决定会话的逻辑放在两个应用程序共享和/或使用的文件中。

$isProduction = ...;

session_name($isProduction ? "LIVE" : "DEMO");
session_start();
1赞 Md Zahid 12/28/2022 #2

如果你的意思是你的PHP文件数量,并且你想访问存储在PHP会话中的一些值,那么你应该session_start();对于每个文件

您可以像这样分离会话

session_name($isAPP_ONE ? "APP_ONE" : "APP_TWO");

喜欢store_session.php

session_start();

$_SESSSION["username"] = "Md Zahidul Islam";

首页.php

session_start();

$_SESSSION["username"]; // this will give you Md Zahidul Islam

首页-两个.php

session_start();

$_SESSSION["username"]; // this will give you Md Zahidul Islam

如果你使用这样的工作,那么就没有必要使用session_start();在每个文件上。

像标题.php

session_start();

首页.php

include("header.php");

$_SESSSION["username"]; // this will return you Md Zahidul Islam and this value will come from the store_session.php file

首页-两个.php

include("header.php");

$_SESSSION["username"]; // this will return you Md Zahidul Islam and this value will come from the store_session.php file

评论

0赞 vinai 12/28/2022
这是 2 个完全独立的应用程序。因此,如果会话变量名称恰好相同,则不应将其从一个应用程序传递到另一个应用程序。所以我发现我们需要添加 session_name(“AAA”);和 session_Name(“BBB”),分别放在两个应用程序的每个页面上。将在生产中尝试这个,看看它是否有效!
0赞 Md Zahid 12/29/2022
您可以像这样分离会话 session_name($isAPP_ONE ?“APP_ONE” : “APP_TWO”);