我想同时检查会话和http引用,但这对我不起作用。
第一页:
<?php
session_start();
$_SESSION['something'] = '1';
?>
第二页:
<?php
session_start();
if(!strpos($_SERVER["HTTP_REFERER"], "some referer")){
die(header("Location: my site"));
}
if(!isset($_SESSION['something'])){
die(header("Location: my site"));
}
session_destroy();
// rest code
我在做什么错了?
答案 0 :(得分:1)
好像您遇到了不必要的type conversion。
strpos
返回字符串内(部分)匹配项的索引。如果您要检查的是确切的引荐来源,它将返回0
并求值为false
,从而输入条件。
通过以下任一方式显式检查strpos
的返回类型:
if (is_bool(strpos($_SERVER["HTTP_REFERER"], "some referer")))
这意味着它返回false,因此找不到它,或更重要的是:
if (strpos($_SERVER["HTTP_REFERER"], "some referer") === FALSE)
答案 1 :(得分:0)
if((!strpos($_SERVER["HTTP_REFERER"], "some referer")) || !isset($_SESSION['something'])){
die(header("Location: my site"));
}
我认为您需要这种情况