区分PHP中的两个会话
我试着用下面的方法在本地主机上为一个网站编码。说localhost/abc:区分PHP中的两个会话,php,session,Php,Session,我试着用下面的方法在本地主机上为一个网站编码。说localhost/abc: <?php session_start(); $_SESSION['name']=$row['name'] ?> 产量很好。但是,当同一代码用于同一本地主机上的另一个网页时,请使用localhost/xyz。然后,名字之间出现了歧义。好像我需要区分xyz和abc的会话 所以我试了一下: <?php session_id(226); session_name(veer); session_star
<?php
session_start();
$_SESSION['name']=$row['name']
?>
产量很好。但是,当同一代码用于同一本地主机上的另一个网页时,请使用localhost/xyz。然后,名字之间出现了歧义。好像我需要区分xyz和abc的会话
所以我试了一下:
<?php
session_id(226);
session_name(veer);
session_start();
.
.
.//connection with database and all
.
$_SESSION['name']=$row['name'];
echo($_SESSION['name']);
?>
当另一台机器通过同一台服务器登录时,我创建的会话可由该机器访问同一网页
有什么解决办法吗。或者如何区分两个会话。这是什么
<?php
session_start();
if (!isset($_SESSION['xyz'])) { $_SESSION['xyz'] = array(); }
$_SESSION['xyz']['name'] = $row['name'];
?>
有时,我只是在会话密钥前加前缀,而不是执行上述操作
示例:$_会话['xyz_名称];
当我意识到我的CPanel已经被自己的一些会话使用后,我就这么做了
这引起了我的冲突。这是什么
<?php
session_start();
if (!isset($_SESSION['xyz'])) { $_SESSION['xyz'] = array(); }
$_SESSION['xyz']['name'] = $row['name'];
?>
有时,我只是在会话密钥前加前缀,而不是执行上述操作
示例:$_会话['xyz_名称];
当我意识到我的CPanel已经被自己的一些会话使用后,我就这么做了
这导致了我的冲突。来自同一用户代理对同一web服务器的请求将共享同一个会话,除非根据您的确切服务器设置进行显式配置 通常可以避免这个问题,因为“其他网页”实际上完全位于另一个域上,因此会话cookie(以及扩展会话数据)不会被共享。如果希望在
localhost
上独立运行不同的应用程序,也应该这样做:在不同的内部域上设置不同的虚拟主机
您也可以通过不直接使用$\u SESSION
来存储数据,而使用基于某些区别因素(如$\u SESSION['SCRIPT\u NAME']
)的子键,完全在代码中解决此问题。一个非常简单的例子:
$sessionKey = "default";
if (strpos($_SESSION['SCRIPT_NAME'], "dir1/")) {
$sessionKey = "dir1";
}
else if (strpos($_SESSION['SCRIPT_NAME'], "dir2/")) {
$sessionKey = "dir2";
}
$_SESSION[$sessionKey]['mydata'] = 'foo';
但是,最后一个解决方案确实不雅观,我不推荐。来自同一个用户代理对同一个web服务器的请求将共享同一个会话,除非根据确切的服务器设置进行显式配置 通常可以避免这个问题,因为“其他网页”实际上完全位于另一个域上,因此会话cookie(以及扩展会话数据)不会被共享。如果希望在
localhost
上独立运行不同的应用程序,也应该这样做:在不同的内部域上设置不同的虚拟主机
您也可以通过不直接使用$\u SESSION
来存储数据,而使用基于某些区别因素(如$\u SESSION['SCRIPT\u NAME']
)的子键,完全在代码中解决此问题。一个非常简单的例子:
$sessionKey = "default";
if (strpos($_SESSION['SCRIPT_NAME'], "dir1/")) {
$sessionKey = "dir1";
}
else if (strpos($_SESSION['SCRIPT_NAME'], "dir2/")) {
$sessionKey = "dir2";
}
$_SESSION[$sessionKey]['mydata'] = 'foo';
然而,最后一个解决方案确实不雅观,我不推荐。简单地说。。。当您使用同一浏览器实例访问同一web服务器上的两个不同站点时,您正在访问服务器的同一内存区域。因此
http://localhost/xyz
和http://localhost/abc
引用的是同一站点的本地主机,因此您不会通过会话\u start()
启动另一个会话,而是继续它。您也可以像前面所说的那样创建虚拟主机,但是为了进行测试(我想您是这样的),只需使用不同的浏览器即可
另外,您通常不能在不同的机器上共享会话,所以我认为这是您的逻辑错误。或者试试
session_start();
echo (session_id());
在页面顶部,查看您是否正在开始或恢复我认为您没有的相同会话。我认为您的页面在不同的会话中存储了相同的数据,您将其误认为是相同的会话。简单地说。。。当您使用同一浏览器实例访问同一web服务器上的两个不同站点时,您正在访问服务器的同一内存区域。因此
http://localhost/xyz
和http://localhost/abc
引用的是同一站点的本地主机,因此您不会通过会话\u start()
启动另一个会话,而是继续它。您也可以像前面所说的那样创建虚拟主机,但是为了进行测试(我想您是这样的),只需使用不同的浏览器即可
另外,您通常不能在不同的机器上共享会话,所以我认为这是您的逻辑错误。或者试试
session_start();
echo (session_id());
在页面顶部,查看您是否正在开始或恢复我认为您没有的相同会话。我认为您的页面在不同的会话中存储了相同的数据,您将其误认为是相同的会话。使用
session\u regenerate\u id()第二个文件(xyz)中的代码>方法。使用会话重新生成\u id()第二个文件(xyz)中的代码>方法。除非您真的知道自己在做什么,否则不要手动设置会话id。并为两个站点使用唯一的会话名称。这里的第一个答案可能会帮助您避免手动设置会话id,除非您确实知道自己在做什么。并为两个站点使用唯一的会话名称。这里的第一个答案可能会对您有所帮助