2014-01-08 13 views
1

我使用ajax和php创建一个在线商店。我的索引有一个与ajax一起显示的登录部分,并且还有一个导航条,在完成登录时获取用户的名称。PHP会话存储变量,但当更改页面时,它们消失

因此,当您登录到页面时,表单会将您发送到Login.php,您可以在其中看到会话的内容以及导航器栏的变化,如前所述。

我只在索引页上有session_start(),它工作正常; SESSION存储了我想要的所有内容以及导航栏,显示了名称。但是当我用ajax改变某些东西并打印出会话时(print_r($ _ SESSION)),结果发现会话消失了,而且没有定义。

一位朋友告诉我在每个页面放置session_start(),所以我把它放在Login.php文件中,现在会话变量在登录后显示为空,所以导航栏甚至不工作。

此外,在登录后刷新索引时,它不会保持记录状态。

因此,Session看起来会存储这些变量,但它们不会长时间保存。

我想使用MVC计划(这是一个任务),所以我只用在session_start上的索引和登录页面,而不是在“控制器”和“意见”

综上所述,我的会话工作在开始,它存储数据,我改变到第二页,仍然有效,加载页面后内容消失,会话未定义,但如果我在第二个文件中记下“session_start()”,甚至不工作

这里是我从数据库中获取信息的代码。 (我不认为这是有用的,但)

function Login() 
{ 
    // Skiping conection code 

    $sql = "SELECT * FROM Usuario WHERE nombre = '$username' && password = '$password'"; 
    $resultat = mysqli_query($connexio,$sql)or die(mysqli_error($connexio)); 
    $usuaris = array(); 
    while ($fila = mysqli_fetch_array($resultat)) 
    { 
     $usuaris = $fila; 
    } 
    $_SESSION['ID'] = $usuaris['ID']; 
    $_SESSION['nombre'] = $usuaris['nombre']; 
    $_SESSION['admin'] = $usuaris['Admin']; 

    mysqli_close($connexio); 
    return $usuaris; 
} 

感谢您的关注

+0

登录作品,这段代码只是为了看看我是如何进入会话变量中的数据 – user3172801

+3

您需要在使用Sessions变量的每个页面上使用session_start()。 – Goikiu

+0

在开始将变量插入$ _SESSION之前,您是否调用session_start()? – martin

回答

0

添加在session_start前下列()

session_set_cookie_params(0, "/"); 
+0

一个更复杂的答案可能会更有帮助。为什么要这样做? – pzkpfw

+0

是设置在php.ini文件中定义的cookie参数。此功能的效果只会持续脚本的持续时间。因此,您需要在每个请求和session_start()被调用之前调用session_set_cookie_params()。 此函数更新可以使用ini_get()检索的相应PHP ini配置密钥的运行时ini值。 http://www.php.net/manual/en/function.session-set-cookie-params.php –