我的网站正在运行(排序)。当我检查是否存在会话时,它们会回显出一条消息,但是当我在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);
答案 0 :(得分:1)
某些浏览器如果路径设置,也需要域名
setcookie ( $name, $value, $expire, $path, $domain);
关于$ expire 这是自从饼干到期以来Epoc以来的“绝对”时间,所以在一小时内过期应该是:
$expire = time()+3600;
答案 1 :(得分:1)
到目前为止,您的代码看起来很不错。
但等等..伙计..会话通常存储在COOKIE中(作为ID)。 Chrome中的会话存储和WEB存储是完全不同的,并且是HTML5而不是PHP会话的一部分。
你说你得到了正确的回音,所以你的会话确实没有问题。 如果您打开开发人员控制台并在网络选项卡中看到发送的cookie,那么一切都很完美。
如果您遇到会话cookie本身的问题, 请提供并检查php.ini中的会话配置变量:
来自控制台:
php -i | grep session
或在网络服务脚本中使用phpinfo();
。
session.use_cookies
应该开启