2014-03-29 34 views
0

我有一個非常簡單的功能,它會檢查['id']是否存在於會話中並重定向(如果是這種情況),位於我的login.php頂部 它的工作原理,但只有在我提交登錄表單兩次後。PHP如果用戶登錄不工作首先刷新

require_once'inc/header.inc';

HTML之前包含:

<?php 
require 'inc/init.php'; 
session_regenerate_id(); 
?> 

的init.php包含

<?php 
session_start(); 
if(!isset($_SESSION) || empty($_SESION)){ 
    require 'inc/db.php'; 
    require 'users.class.php'; 
    require 'general.class.php'; 
    require 'functions.php'; 
    $users  = new Users($db); 
    $general = new General($db); 
    $errors  = array(); 
} 

?> 

這是我的login.php的頂部:

<?php 
require_once 'inc/header.inc'; 

if ($general->is_logged_in()) { 
    header("Location: index.php"); 
    exit; 
} 

然而,頁面不斷loadin第一次。

的功能,如果你照顧它:

public function is_logged_in() { 
    if (isset($_SESSION['id'])) { 
     return true; 
    } else { 
     return false; 
    } 
} 
+0

不要使用.inc作爲includes,請使用.php像其他地方一樣。或者確保已經正確設置了.htaccess,但這仍然是一個糟糕的做法。 (與你的問題無關,但值得一提) – MightyPork

+0

你在哪裏設置'$ _SESSION ['id']'? –

+0

錯字?將'empty($ _ SESION)'改爲'empty($ _ SESSION)' –

回答

0

你不覺得它應該是這樣的

session_start(); 
session_regenerate_id(); 

在你的函數首先生成的ID,然後會話啓動因此值不會被分配給會話。

+0

你確定嗎? init.php包含我的開始,並且regenid在之後。 – Lukerb

+0

哦..那麼它是正確的..是的,非常頁面加載函數session_generate_id()生成一個新的ID和以前的ID被覆蓋。你可以在這裏查看.. http://www.php.net/manual/en/function.session-regenerate-id.php –

0

剛剛在login()返回/ setid之後添加了重定向,而不是依靠檢查頁面加載時是否存在id,以及是否在頁面加載時運行重定向 - 用戶在任何情況下都不能重新進入頁面。不知道爲什麼前者不行。