2014-01-08 122 views
1

我的網站正在運行(整理)。當我檢查是否有會話時,它們會回顯出一條可用的消息,但是當我檢查會話存儲區時,會話不會出現,這很奇怪。我也嘗試設置一個cookie,但是這也沒有出現。那麼我做錯了什麼。所以會話工作,但沒有得到保存,餅乾都沒有得到任何存儲Cookie和會話未被保存

這是登錄類

public function __construct(DB $pdo) 
{ 
    $this->pdo = $pdo->pdo; 

    if(isset($_GET['logout'])){ 
     $_SESSION = array(); 
     session_destroy(); 
    } 

} 

public function checklogin() 
{ 
    if(isset($_SESSION['user_sess']) && $_SESSION['logged_in'] === true){ 
     return true; 
    } else { 
     return false; 
    } 
} 

public function loginwithdata($email, $password) 
{ 
    $query = $this->pdo->prepare('SELECT * FROM `users` WHERE `email` = ?'); 

    $query->bindValue(1, $email); 

    try{ 

    $query->execute(); 

    $data = $query->fetch(); 

    $salt = $data['salt']; 
    $user_key = $data['user_key']; 
    $hashed_pass = sha1(md5($salt.$password)); 

    if($this->verify($hashed_pass, $email) === true){ 

     $_SESSION['user_sess'] = $user_key; 
     $_SESSION['logged_in'] = true; 
     setcookie('key', '12345678910', 1209600, '/'); 
     return true; 
    } else { 
     return false; 
    } 

    } catch(PDOException $e) { 
     die($e->getMessage()); 
    } 
} 

這裏的一部分是ajax_login.php

require '../core/init.php'; 

if(isset($_POST)) 
{ 
    $email = $_POST['email']; 
    $password = $_POST['password']; 

    if(!empty($email) && (!empty($password))){ 

     $try = $login->loginwithdata($email, $password); 

     if($try){ 
      //login successful 
      echo 'success'; 
     } else { 
      echo 'login failed'; 
     } 
    } 
} 

and on my index page i have 

require_once 'core/init.php'; 

if($login->checklogin() === true){ 
    echo "you are logged in"; 
} else if ($login->checklogin() === false) { 
    echo "you are not logged in"; 
} 

和我init文件

session_start(); 
error_reporting(E_ALL); 
date_default_timezone_set('Europe/London'); 

require_once 'classes/DB.php'; 
require_once 'classes/Upload.php'; 
require_once 'classes/Login.php'; 
require_once 'classes/Register.php'; 
require_once 'classes/Site.php'; 
require_once 'classes/Admin.php'; 

require_once 'sinitize.php'; 

$pdo  = new DB; 
$upload  = new Upload($pdo); 
$login  = new Login($pdo); 
$register = new Register($pdo); 
+0

你有'在session_start();'在使用,啓動或破壞會話每個腳本? – DanFromGermany

+0

是啊我iv包括init.php文件在每頁 –

回答

1

你的代碼看起來不錯。

但是,等等..夥計..會話通常會存儲在COOKIE(作爲ID)中。 chrome中的SESSION STORAGE和WEB STORAGE是完全不同的東西,它是HTML5的一部分,而不是PHP Sessions的一部分。

你說你得到正確的回聲,所以你的會話真的沒有錯。 如果您打開開發人員控制檯並在網絡選項卡中看到發送的cookie,則完美無缺。

如果您有會話cookie自身的問題, 請提供從php.ini中檢查會話配置變量:

從控制檯:

php -i | grep session 

或服務的網絡使用phpinfo();腳本。

session.use_cookies應在

參見:http://www.php.net/manual/de/ini.list.php

+0

謝謝:D我認爲會議存儲有一些與它相關的東西大聲笑它只是現在不設置cookie –

1

某些瀏覽器,如果設置了路徑,希望域太:

setcookie ($name, $value, $expire, $path, $domain); 

關於$到期 它在幾秒鐘內從太平洋業務中心時,該cookie過期的「絕對」的時間,所以在一個小時內到期應該是:

$expire = time()+3600; 

見: http://www.php.net/setcookie

+0

當時im工作在一個子文件夾,所以它會被setcookie('key','2929292','1209600','/','www.mydomain.com /測試'); –

+0

更正確的形式:setcookie('key','2929292','1209600','/ test','www.mydomain.com') –

+0

PHP在session_start()設置cookie,不需要設置cookie手動 – DanFromGermany