我在搜索为什么我的会话不会被设置时通过这个SO Q / A.
On $_GET set $_SESSION won't work
我真的不知道这是否适用于我的情况。在这里。
的index.php
<?php
session_start();
if (!isset($_SESSION["authenticated"])) $_SESSION["authenticated"] = false;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
...
然后,当用户验证自己时,我会调用以下内容。
authenticate.php
<?php
require_once "data/data_access.php";
$userName = "";
$password = "";
if (isset($_REQUEST["userName"])) $userName = $_REQUEST["userName"];
if (isset($_REQUEST["password"])) $password = $_REQUEST["password"];
$isAuthentic = isAuthenticUser($userName, $password);
$_SESSION["authenticated"] = $isAuthentic;
echo $isAuthentic;
?>
我还要每隔5秒检查一次身份验证事件,以便为用户所在的部分创建按钮。
authenticated.php
<?php echo isset($_SESSION["authenticated"]) && $_SESSION != false ? 'true' : 'false'; ?>
和我的Ajax呼叫设置:
my_project.js
$(document).ready(function() { startAuthenticationChecking(); });
function startAuthenticationChecking() {
setInterval(function() { ajaxSession("authenticated.php"); }, 5000);
}
function ajaxSession(actionURL) {
var authenticated = false;
$.ajax({
async: false,
url: actionURL,
success: function(authenticated) {
alert(authenticated);
if (authenticated) {
if (("#addNewAtvButtonDiv").is(":empty"))
$("#addNewAtvButtonDiv").add("<button id='newAtvButton'>Inscrire un nouveau VTT en inventaire</button>");
if (("#addNewSledButtonDiv").is(":empty"))
$("#addNewSledButtonDiv").add("<button id='newSledButton'>Inscrire un nouvel UTT en inventaire</button>");
if (("#addNewUtvButtonDiv").is(":empty"))
$("#addNewUtvButtonDiv").add("<button id='newUtvButton'>Inscrire une nouvelle motoneige</button>");
$("button").button();
} else {
$("#addNewAtvButtonDiv").children().remove();
$("#addNewSledButtonDiv").children().remove();
$("#addNewUtvButtonDiv").children().remove();
}
}
});
}
我的问题
虽然我在$_SESSION["authenticated"] = false
之后立即设置了session_start();
,但当ajaxSession()
询问用户是否通过authenticated.php
进行了身份验证时,它始终返回'false'
。使用具有适当凭据的authenticate.php
进行身份验证后的事件。
相关问题:PHP / Ajax : How to show/hide DIV on $_SESSION variable value?
欢迎任何帮助!我最近一直在为这几天和几天工作,现在还在。
谢谢!
答案 0 :(得分:5)
确保所有使用$_SESSION
变量的网页在输出之前都声明了session_start();
。
看起来 authenticate.php 没有声明session_start();
,但在下面使用会话请求。
$ _ SESSION [“authenticated”] = $ isAuthentic;
除非您已包含/需要文件 authenticate.php ,并且父文件已声明session_start();
,否则会导致问题。
N.B:
在session_start();将创建会话或恢复会话。每个使用会话变量的页面都需要它。
session_start()根据通过GET或POST请求传递的会话标识符创建会话或恢复当前会话,或通过cookie传递。
答案 1 :(得分:2)
除了检查你是否有session_start()之外,如果在检查它们是否已设置或检查其值之前尚未声明它们,则会遇到会话变量未正确报告值的问题。
所以试着把它放在:
$_SESSION["authenticated"];
在你之前:
if(!isset($_SESSION["authenticated"])) $_SESSION["authenticated"] = false;