【发布时间】: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。
从上面的代码中可以看出,<?php session_start(); ?> 在两个 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