0

好的,我读了这篇文章,有人建议使用此代码检查用户是否离开页面:

    if($_SERVER['REQUEST_URI'] !== 'page_with_session.php'){
    session_destroy(); // Kill session for all pages but page_with_session.php
}

现在有人可以解释一下 REQUEST_URI 是如何工作的,因为我似乎在 PHP 手册中找不到它,或者有人可以建议另一种方法来检查用户何时离开页面。

请注意我不能在这个项目中使用 Javascript。

4

3 回答 3

3

使用该代码,您只能判断用户何时更改到服务器上的另一个页面。如果他离开另一个网站,或关闭标签/浏览器,这将不起作用。请改用 javascript 或使用会话超时。REQUEST_URI 是当前请求的 URI,因此如果用户更改到您服务器上的另一个页面,您可以检查它不是“会话页面”并销毁会话。这仅在您不使用重写或类似技术时才有效。

于 2012-05-16T13:29:53.947 回答
1

$_SERVER 是一个包含标题、路径和脚本位置等信息的数组。此数组中的条目由 Web 服务器创建。无法保证每个 Web 服务器都会提供其中任何一个;服务器可能会省略一些,或提供此处未列出的其他内容。也就是说,在 » CGI/1.1 规范中说明了大量这些变量,因此您应该能够预料到这些变量。

$HTTP_SERVER_VARS 包含相同的初始信息,但不是超全局的。(注意 $HTTP_SERVER_VARS 和 $_SERVER 是不同的变量,PHP 会这样处理它们)

'REQUEST_URI' 为访问此页面而提供的 URI;例如,'/index.html'。

(c) php.net

如您所见,它得到了完美的解释。当用户离开页面时,您无法做您想做的事。所以正如@jimpic 告诉你的那样使用会话。

于 2012-05-16T13:34:15.057 回答
1

唯一真正做到这一点的方法是保持非常短的会话超时,然后使用带有元刷新的嵌入式 iframe,或者对 PHP 页面进行 javascript 调用以使其保持活动状态。

于 2012-05-16T13:42:08.960 回答