cookie和会话未被保存

时间:2014-01-08 10:24:18

标签: php session cookies pdo

我的网站正在运行(排序)。当我检查是否存在会话时,它们会回显出一条消息,但是当我在chrome中检查会话存储时会发生会话存储,这很奇怪。我也试图设置一个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";
}

和我的初始文件

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);

2 个答案:

答案 0 :(得分:1)

某些浏览器如果路径设置,也需要域名

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

关于$ expire 这是自从饼干到期以来Epoc以来的“绝对”时间,所以在一小时内过期应该是:

$expire = time()+3600;

另见: http://www.php.net/setcookie

答案 1 :(得分:1)

到目前为止,您的代码看起来很不错。

但等等..伙计..会话通常存储在COOKIE中(作为ID)。 Chrome中的会话存储和WEB存储是完全不同的,并且是HTML5而不是PHP会话的一部分。

你说你得到了正确的回音,所以你的会话确实没有问题。 如果您打开开发人员控制台并在网络选项卡中看到发送的cookie,那么一切都很完美。

如果您遇到会话cookie本身的问题, 请提供并检查php.ini中的会话配置变量:

来自控制台:

php -i | grep session

或在网络服务脚本中使用phpinfo();

session.use_cookies应该开启

请参阅:http://www.php.net/manual/de/ini.list.php