2014-01-08 126 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