【问题标题】:PHP redirect only if session variable is not found redirects many times仅当找不到会话变量时 PHP 才重定向多次重定向
【发布时间】:2012-06-19 12:28:38
【问题描述】:

我有几个域指向同一个 php 脚本。 访问时,我想重定向用户做一个随机域,但只有一次。 为此,我设置了一个会话变量,重定向并检查该变量。

我的代码是这样的:

session_start(); if($_SESSION['seen'] != 1) { $_SESSION['seen'] = 1; header("位置:".$randomurl); }

因此,如果用户从未看过该页面,它应该只重定向 1 次,因为之后会话变量将包含 1 并且它不会重定向。

但是,这将我重定向了大约 5 次,直到它停止在页面上,我无法解释原因。

有人知道吗?

【问题讨论】:

  • 您可以为此使用 cookie。如果用户想再次查看随机页面,他们可以删除他们的会话 cookie,这只是在您的服务器上浪费查找。
  • 所以您在每个域上或仅在 1 个入口点上都有此代码?如果在每个域上,那么这是非常合乎逻辑的,因为每个新域都无法读取为调用域放置的会话 cookie,并且它只会在您重定向到您已经访问过的域上的 url 时停止。 (因为它会有一个当前有效的会话 cookie)
  • 就像 Harald 说的,我很确定在设置会话时它是每个域的,除非它是子域,在这种情况下你可以将值设置为“.domain”。也许这会有所帮助stackoverflow.com/questions/1064243/… 或这.. stackoverflow.com/questions/1339984/cross-domain-php-sessions

标签: php session redirect header


【解决方案1】:
<?php

session_start();


if ( !isset( $_SESSION["valid_user"]) )

  { header("location:domain");
}

【讨论】:

  • 你从哪里得到$_SESSION["valid_user"]? OP没有提到它。此外,您应该始终为您的答案提供某种解释/推理。强烈建议不要仅使用代码回答。
【解决方案2】:

尝试:

if(isset($_SESSION['seen']) && $_SESSION['seen']!= 1) {
....
}

【讨论】:

  • 没用,我认为问题是因为我有不同的域并且会话仅对一个域有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-19
  • 2012-11-17
  • 1970-01-01
  • 2014-08-14
  • 2013-08-02
  • 1970-01-01
相关资源
最近更新 更多