簡體   English   中英

Cookie和會話未保存

[英]cookies and sessions are not being saved

我的網站正在運行(排序)。 當我檢查是否存在會話時,當我在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);

一些瀏覽器, 如果設置了path ,也需要域:

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

關於$ expire這是自Epoc Cookie失效以來的“絕對”時間(以秒為單位),因此一小時內應為:

$expire = time()+3600;

另請參閱: http : //www.php.net/setcookie

到目前為止,您的代碼看起來不錯。

但是,請稍等。會話通常會存儲在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM