我一直在我们网站的购买流程部分使用以下代码,将其放置在使用 session 的每个阶段的顶部。
<?php
session_cache_limiter('private_no_expire'); // must go before session start
session_start();
我想开始在网站上更广泛地使用 session ,例如在客户登录区域。
我有一个名为“all.php”的文件,其中包括我所有的类/对象,并在我系统的每个页面的开头共享包含。我认为从所有单独的电子商务文件中删除上述代码并添加到“all.php”的顶部是个好主意,因为它是系统范围的,并且是页面上加载的第一件事。
自从这样做之后,我的客户登录区就遇到了问题。在用户导航了几个链接后,它会不断地让用户返回登录页面。看起来当你点击一个你已经访问过的 URL 时它不喜欢它并且只是让你回到开始。如果您将 &1=1 添加到您之前访问过的 url 上,它会诱使系统让您访问该页面,因为它是一个新的唯一 url。所以缓存肯定是搞砸了。
我实际上并没有在网站的这一部分使用 session ,所以这并不是说您真的被注销了……它只是将您发送到您开始的那个页面,
谁能阐明这里可能出了什么问题?
会不会是我使用了session_cache_limiter('private_no_expire');
我使用上面这行是因为我的购买过程使用了 POST 表单并且点击后退按钮给出了关于正在重新提交数据的丑陋消息。
http://php.net/manual/en/function.session-cache-limiter.php
更新:
注释掉第一行有帮助,问题已经停止:
//session_cache_limiter('private_no_expire'); // must go before session start
这是一个临时修复,因为这意味着后退按钮会导致数据重新提交警告。这只是意味着我需要正确地实现它,但我仍然想了解为什么那条线会这样做:
最佳答案
绕过此问题的最快和最干净的方法是在处理完表单数据后执行此操作,而不是在执行处理的页面上显示信息。
Header('Location: http://www.domain.com/page.php');
例如,如果您要将商品添加到购物车,完成后将用户重定向到他们的购物车页面或再次重定向到商品页面。
自从这样做之后,我的客户登录区就遇到了问题。在用户导航了几个链接后,它会不断地让用户返回登录页面。看起来当你点击一个你已经访问过的 URL 时它不喜欢它并且只是让你回到开始。如果您将 &1=1 添加到您之前访问过的 url 上,它会诱使系统让您访问该页面,因为它是一个新的唯一 url。所以缓存肯定是乱七八糟的。
session_cache_limiter('private_no_expire')
。您的工作不需要它。
关于php - 加上session_start();可以吗?到我整个网站的顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26212961/