【问题标题】:Wamp64 not persisting session between pages, each page change generates a new sessionWamp64不在页面之间保持会话,每次页面更改都会生成一个新会话
【发布时间】:2019-11-07 22:33:09
【问题描述】:

Wamp64Server3.1.0_x64 的重新安装正在 Windows 10 Pro 10.0.18362 Build 18362 64 位戴尔工作站上通过 LocalHost 作为封闭的 php 开发环境在 c:\wamp64 上运行。

c:\wamp64 及以下的所有 php.ini 文件都具有以下会话变量设置。在此开发环境中,我们希望将会话变量作为 SESS_ 文件存储在 c:\wamp\tmp 文件夹中,而不是存储在 cookie 中。

[Session]
session.save_handler = files
session.save_path ="c:\wamp64\tmp" 
;(Note: if this is specified as c:/wamp64/tmp, Apache generates "can't find folder" errors.)
session.use_strict_mode = 0
session.use_cookies = 0 
;(Note: Presumably setting use_cookies to 0 causes all cookie-related variables to be ignored.)
session.use_only_cookies = 0
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

两个 php 文件 test1.php 和 test2.php 位于 c:\wamp64\www\testsession 文件夹中:

<?php session_start(); ?>
<!doctype html>
<html lang="en">
<head>
  <title>Session Test Page 1</title>
</head>
<body>
<?php 
 echo session_id().'<br>'; print_r($_SESSION); echo '<br>';
$_SESSION['page'] = 'Page 1';
echo session_id().'<br>'; print_r($_SESSION); echo '<br>';
?>
<form action="page2.php">
                <input type="submit" value="Page 2">
</form>
</body>
</html>
<?php session_start(); ?>
<!doctype html>
<html lang="en">
<head>
  <title>Session Test Page 2</title>
</head>
<body>
<?php 
 echo session_id().'<br>'; print_r($_SESSION); echo '<br>';
$_SESSION['page'] = 'Page 2';
echo session_id().'<br>'; print_r($_SESSION); echo '<br>';
?>
<form action="page1.php">
                <input type="submit" value="Page 1">
</form>
</body>
</html>

要访问第 1 页,打开浏览器并输入“localhost/testsession/page1.php”的 URL,立即在 c:\wamp64\tmp 中生成 sess_7dmdo58tq30mh2bf7712vecrk2 文件并在浏览器中显示该页面。显示session_id和$_SESSION数组的全部内容,设置一个$_SESSION变量“page”,再次显示session_id和$_SESSION数组。输出如下:

7dmdo58tq30mh2bf7712vecrk2

Array ( )

7dmdo58tq30mh2bf7712vecrk2

Array ( [page] => Page 1 )

当点击第2页提交按钮时,会立即在c:\wamp64\tmp中创建一个sess_bbf1umlcfkhr6cbf5038isqev4文件,并且在同一浏览器选项卡的屏幕上出现以下输出(单独的选项卡没有打开):

bbf1umlcfkhr6cbf5038isqev4

Array ( )

bbf1umlcfkhr6cbf5038isqev4

Array ( [page] => Page 2 )

请注意,显示第二页时的 session_id 与第一页的 session_id 不同,并且 $SESSION 数组最初是空的,当它应该有 Array ( [page] => Page 1 ) 传递给它时。显然数组是空的,因为第二页运行的会话与第一页不同。换句话说,第一页的会话不会持续到第二页。 sess 文件包含设置的$_SESSION['page'] 值,假设在两个页面上都单击了提交按钮。

在多个浏览器中会出现同样的行为:Chrome、Edge、Internet Explorer、Firefox、Avast Secure Browser。

从上面的代码中可以看出,&lt;?php session_start(); ?&gt; 在两个 php 文件中都被用作第一行。我搜索了无数的论坛帖子,这些帖子坚持认为遗漏或放错位置是问题所在。只有一个这样的帖子,解决方案是让托管服务的支持团队进行配置更改,但下一条评论简单地说,“很高兴知道他们改变了什么。”确实!!

因为这个问题与浏览器无关,是在重新安装 Wamp64 之后出现的,而且 php 代码非常简单,我确信这是 php 模块或 Wamp 的 Apache 模块中的配置问题。但我找不到任何可能导致此行为的设置的引用。以前安装的 Wamp(我在本地开发环境和实时网站上都使用过很多)从未出现过这个问题。我不愿意卸载 WampServer 并重新安装它,除非绝对必要,因为需要在安装中追踪分散的 php.ini 和其他配置文件 - 再次 - 以确保许多设置适合我的环境。值得庆幸的是,实时网站不会发生这种情况。

我怀疑这是 php 或 Apache 中的配置问题。我难住了。任何建议将不胜感激。

【问题讨论】:

  • 以上页面可以在shoshonebch.org/codetest/page1.php 的实时网站中查看,它们的行为符合预期。
  • Wamp64Server3.1.0_x64 包包含三个版本的 PHP,5.6.31、7.0.23 和 7.1.9。安装时的默认版本是 5.6.31。切换到 7.1.9 解决了这个问题。 (需要这个 Wamp64Server 的后置版本来恢复相关网站的原始开发环境。)

标签: session configuration wampserver


【解决方案1】:

此行为是使用安装的默认 PHP 版本 5.6.31 的结果。通过打开管理弹出窗口切换到版本 7.1.9,将鼠标悬停在 PHP 选项上,然后悬停在版本选项上,然后单击 7.1.9 选项。进行更改后,服务器将自动重启。

【讨论】:

    猜你喜欢
    • 2013-10-02
    • 2014-01-15
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 2023-03-15
    • 2017-12-28
    相关资源
    最近更新 更多