Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 未保存Cookie和会话_Php_Session_Cookies_Pdo - Fatal编程技术网

Php 未保存Cookie和会话

Php 未保存Cookie和会话,php,session,cookies,pdo,Php,Session,Cookies,Pdo,我的站点正在运行(排序)。当我检查是否有会话时,它们会回显一条消息,这条消息有效,但当我检查chrome中的会话存储时,会话不会出现,这很奇怪。我也试着做了一块饼干,但也没有。那么我做错了什么呢。因此,会话正在工作,但没有被存储,cookies也没有被存储 这是登录类的一部分 public function __construct(DB $pdo) { $this->pdo = $pdo->pdo; if(isset($_GET['logout'])){

我的站点正在运行(排序)。当我检查是否有会话时,它们会回显一条消息,这条消息有效,但当我检查chrome中的会话存储时,会话不会出现,这很奇怪。我也试着做了一块饼干,但也没有。那么我做错了什么呢。因此,会话正在工作,但没有被存储,cookies也没有被存储

这是登录类的一部分

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

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

setcookie ( $name, $value, $expire, $path,  $domain);
大约1美元到期 这是自Epoc在cookie过期后的“绝对”时间(秒),因此在一小时内过期应为:

$expire = time()+3600;
另见:

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

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

你说你得到了正确的回音,所以你的会话真的没有问题。 如果打开开发者控制台,在networking选项卡中看到发送的cookie,一切都很完美

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

从控制台:

php -i | grep session
或者使用
phpinfo()在web服务的脚本中

会话。使用cookies
应处于打开状态


请参阅:

您是否有
会话_start()在每个使用、启动或销毁会话的脚本中?是的,我在每个页面上都包含init.php文件,此时我正在处理一个子文件夹,因此它将是setcookie('key','2929292','1209600','/','www.mydomain.com/test');更正确的形式:setcookie('key','2929292','1209600','/test','www.mydomain.com')PHP在
session_start()
时设置cookie,无需手动设置cookie在每个页面上添加session_start(),因为我包括init.phpIf,如果您将expire设置为“1209600”它从1970年1月14日起过期了谢谢:D我以为会话存储与它有关lol它只是cookie,现在没有设置