2010-07-31 28 views
0

我有这个问题与我的代码,页面重定向,并不会停止..浏览器停止它,因为它的重定向所有的时间,我有一个global.php文件,其中包括在所有的PHP页面,所以我的推杆此代码为会话和它去像我所说的包括在的login.phpphp eregi()问题

if (!session_is_registered('username')) { 
    if(!eregi('login.php', $PHP_SELF)) header('Location: login.php'); 
} 

而且global.php,但是当我开始它在Web服务器上我的网站,它做我以前说过的,但在我的基于服务器上的计算机上,它工作正常,所以请快速帮我快速

和我的英语抱歉..

+1

posix正则表达式“模块”已弃用。 http://docs.php.net/eregi说:'这个函数从PHP 5.3.0开始已经被拒绝了。依靠这个特性是非常令人沮丧的。“ - 使用pcre来代替,参见http://docs.php.net/preg_match – VolkerK 2010-07-31 08:42:14

回答

2

试试这个:

session_start(); 
if (!isset($_SESSION['username']) && stripos($_SERVER['PHP_SELF'], 'login.php') === false) { 
    header('Location: login.php'); 
} 

两个session_is_registered()eregi()被废弃的函数,不应该被使用。另外,正则表达式对于你正在做的事情无论如何都是矫枉过正的。

+2

由于OP使用'eregi',可能'stripos'应该用来代替'strpos'。 – kennytm 2010-07-31 08:49:10

+0

@KennyTM:好点。现在更新。 – 2010-07-31 09:01:37

+0

非常感谢队友..这工作得很好 – Sayed 2010-07-31 09:18:07

0

尝试:

if (!isset($_SESSION('username'))) { 
    if(FALSE === strpos($_SERVER['PHP_SELF'], 'login.php')) { 
     header('Location: login.php'); 
     exit(); 
    } 
} 

几点建议:

  • 请确保您有session_start()放在你的脚本
  • 使用顶部isset($_SESSION.......
  • 使用strpos而不是废弃的eregi
  • 不要使用过时session_is_registered
  • 使用exit/die头之后重定向
  • 这是$_SERVER['PHP_SELF']$PHP_SELF
  • 使用错误处理,把这些线在你的脚本的顶部:

    • ini_set('display_errors', true);
    • error_reporting(E_ALL);
+0

'display_errors'不应该被硬编码为true。使用'php.ini'进行设置,以便在生产环境和开发环境之间移动时轻松更改。 – 2010-07-31 08:34:26

+0

@Daniel EgebergL它将在那里测试他当前的脚本:) – Sarfraz 2010-07-31 08:35:41