如何使用检查会话和http引用?

时间:2018-10-12 18:42:15

标签: php

我想同时检查会话和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

我在做什么错了?

2 个答案:

答案 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"));
}

我认为您需要这种情况