2013-10-03 44 views
2

我在通过这个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"] = falsesession_start();之后,当ajaxSession()询问用户是否通过认证authenticated.php,它始终返回'false'。使用authenticate.php进行身份验证后使用正确的凭据进行的事件。

相关问题:PHP/Ajax : How to show/hide DIV on $_SESSION variable value?

任何帮助的欢迎!最近我一直在为此工作几天,现在仍然如此。

谢谢!

+3

你运行'在session_start():

所以尽量把这个:

$_SESSION["authenticated"]; 

你之前? – TheNytangel

+0

@Nytangel:不,我不知道。只有'index.php'可以开始一个会话。然后,我主要使用Ajax来更改和加载页面上的各个部分,全部使用'.post()','$ .ajax()','$(“#div_id”).load()'等。 –

+6

session_start()在所有PHP页面上都是必需的。如果已经有cookie告诉PHP有一个现有的会话,它会正确地填充$ _SESSION []。如果它是一个干净的开始,它会做初始化。因此,将session_start()放在每个有你想要的PHP文件上。 –

回答

5

确保所有使用$_SESSION变量的页面在输出前都有session_start();声明。

它看起来像authenticate.php does not have session_start(); declared,but uses a session request below。

$ _SESSION [“authenticated”] = $ isAuthentic;

,除非你已包括这将导致问题/所需的文件authenticate.php,和父文件中有声明的session_start();

N.B:

session_start();将创建会话或恢复会话。每个使用会话变量的页面都需要它。

php.net

在session_start()创建一个会话或恢复基于经由通过cookie GET或POST请求,或通过传递会话标识符的当前一个。

+1

除非'data/data_access.php'有它。 – VladHQ

+0

@ user0000001当然,你可能是对的。它肯定值得检查所有的途径!谢谢! –

+0

现在,当我对'ajaxSession()'函数发出警报时,它会报告当前是否已通过身份验证。我想我会打开另一个关于如何从HTML代码中添加和删除控件并使用jQuery将它们与事件连接的问题。 –

2

除了检查你已经在session_start(),我有正确,如果他们没有得到,如果他们被设置检查或检查自己的价值之前声明会话变量不报告值遇到问题。每一个页面上`;

if(!isset($_SESSION["authenticated"])) $_SESSION["authenticated"] = false; 
+0

+1感谢您的信息!完成。 =) –

相关问题