【发布时间】:2023-03-19 23:48:01
【问题描述】:
我有一个单页网站,它使用 AJAX 加载新的 php 文件并更新显示。
我在主页上启动我的 php 会话,但是当我使用 ajax 更新内部 html 时,我需要这些会话变量来加载新的 php 文件。
这篇文章与这篇文章类似:PHP Session Variables Not Preserved。但我查了一下,我的 php.ini 有 session.use_cookies = 1
主页 PHP:
<?php
session_start();
if(isset($_SESSION['views']))
{$_SESSION['views']=$_SESSION['views']+1;}
else
{$_SESSION['views']=1;}
?>
在用户输入之后,我使用 ajax 调用一个 php 文件并加载页面的一个小节:
<?php
if(isset($_SESSION['views']))
{ echo "Views: " . $_SESSION['views'];}
else
{ echo "Views: NOT SET";}
?>
谁能告诉我我错过了什么重要的步骤?谢谢。
更新:在向主页面和子页面添加 session_id() 调用后,我看到两个页面具有相同的 Session_ID。但是,它仍然无法提取会话变量,如果我确实为它分配了一个值,两个同名的会话变量将保持相互独立。
回答这个问题提出的问题: 我发现我必须在我的 php.ini 文件中设置一个静态 session_save 路径。对于大多数付费虚拟主机服务,它们只有一个默认的会话容器,但它会受到负载平衡的影响。多么放松。
【问题讨论】:
-
当我在新文件中使用 session_start() 时,它会创建一个新会话。无论如何要链接这些会话吗?
-
“链接”会话的是会话cookie,它应该在HTTP请求的Cookie头中...
-
您没有使用负载平衡的网络服务器,是吗? (当 PHP 会话使用默认的基于文件的后备存储时,主机自然无法共享会话信息)
-
我正在使用付费虚拟主机提供商 IPage,这很可能就是这种情况。我想要做的事情是创建一个本地灯服务器,看看它是否与我的付费托管服务提供商做同样的事情。感谢您的输入。
-
同意在本地服务器上进行测试会增加有用的信息。 PHP 允许您定义和注册自己的方法来读取和写入会话信息,因此如果您的托管服务提供商为持久存储提供数据库访问权限,那么您可以使用数据库而不是基于文件的 PHP 会话后备存储,这应该可以正常工作负载平衡的环境。
标签: php ajax session-variables