我目前面临着php会话的问题。我一直在寻找答案,但我担心我的问题太具体了......
问题如下:我正在构建一个只显示一页index.html的网站。此页面包含div #container,每当我通过route()函数选择工具栏中的选项卡时,其内容都会被替换。它有效this way:
一旦Mustache呈现了json数组«articles»,templates.html页面就会包含要替换到页面中的所有信息。 这是相应的#tpl-articles(我删除了不必要的部分)
现在,有一个«登录»标签,它将信息发送到«connexion.php»脚本。此脚本设置$ _SESSION ['user_id']和$ _SESSION ['user_surname']。我的问题是:如果我继续使用另一个标签 - 比如说«默认»一个(在同一个index.html页面上) - 我的load_articles.php不再知道前面提到的$ _SESSION变量了:/
这是«connexion.php»代码:
<?php
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 01 Jul 1980 05:00:00 GMT');
header('Content-type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin:*');
session_name('MODAL');
session_start();
ini_set('session.use_cookies', 0);
ini_set('session.use_only_cookies', 0);
ini_set('session.use_trans_sid', 1);
$msgJson = array();
$msg = array('session_id' => session_id());
array_push($msgJson, $msg);
// info from the «log in» tab
$email = strip_tags($_POST['email']);
$password = strip_tags($_POST['password']);
require('database.php');
$dbh = Database::connect();
$query = "SELECT * FROM `users` WHERE `email`=? AND `password`=?";
$sth = $dbh->prepare($query);
$sth->execute(array($email,sha1($password)));
$tab = $sth->fetchAll(PDO::FETCH_ASSOC);
if (count($tab) == 1) {
$_SESSION['user-id'] = $email;
$_SESSION['user_surname'] = $tab[0][surname];
$msg = array('success' => $_SESSION['user_surname']);
}
else {
$msg = array('error' => 'Fail');
}
array_push($msgJson, $msg);
echo json_encode($msgJson);
?>
这是load_articles.php,它不知道$ _SESSION变量:
<?php
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 01 Jul 1980 05:00:00 GMT');
header('Content-type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin:*');
session_name('MODAL');
session_start();
require 'database.php';
$dbh = Database::connect();
if ( !isset($_SESSION['user-id’])){
$query = 'something';
$sth = $dbh->prepare($query);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
}
else {
$query = 'something_else';
$sth = $dbh->prepare($query);
$sth->execute(array(
$_SESSION['user-id'],
$_SESSION['user-id']
));
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
}
echo json_encode($result);
?>
有人会碰巧理解为什么这些会话变量似乎消失了吗? 我究竟做错了什么 ? 是否应该首先从指定session_start()的php代码生成index.html页面?这对我来说是个大问题......
提前感谢您的帮助和耐心,我是初学者:/
答案 0 :(得分:0)
答案 1 :(得分:0)
问题在于:
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 01 Jul 1980 05:00:00 GMT');
header('Content-type: application/json; charset=utf-8');
删除它们。
PHP代码未缓存在浏览器上,担心告诉浏览器必须自动过期
奖金:
试试这段代码
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
session_start();
header('Access-Control-Allow-Origin:*');
require 'database.php';
$dbh = Database::connect();
function responseJSON($data, $exit = true) {
header('Content-type: application/json');
echo json_encode($data);
if($exit) exit(0);
}
$userId = isset($_SESSION['user-id']) ? $_SESSION['user-id'] : null;
if($userId) {
$query = 'something_else';
$sth = $dbh->prepare($query);
$sth->execute([$userId, $userId]);
responseJSON($sth->fetchAll(PDO::FETCH_ASSOC));
}
$query = 'something';
$sth = $dbh->prepare($query);
$sth->execute();
responseJSON($sth->fetchAll(PDO::FETCH_ASSOC));