js对象的登录状态与仅服务器端会话相比


js object with logged in state vs just server-side session

使用来自服务器会话的重复数据的js对象是否常见?

例如,如果用户已登录,我会将此服务器端存储在我的$_SESSION中。但是,当我在客户端时,如果不检查DOM的某些部分(这很糟糕),或者发送一些Ajax调用来检查$_SESSION中的值,我就无法检查登录状态。我应该只创建一个包含重复数据的js对象吗?

这似乎是个坏主意,因为现在我总是需要保持两个对象同步,但我不知道如何解决这个问题。

您可以在浏览器加载时将几行Javascript回显到浏览器中,或者在需要$_SESSION变量时提取一个单独的脚本。因此,您可以有一个文件"session.php",它只包含以下行:

<?php
    session_start();
    echo json_encode($_SESSION);
?>

然后你可以在Javascript/HTML中使用它(这样你就不必做花哨的AJAX或任何事情):

var session = <?php include('session.php'); ?>

我在这里构建了一个实例:http://home.edgemontgeek.com/dev/stackoverflow/14919887/代码可在此处下载:http://home.edgemontgeek.com/dev/stackoverflow/14919887/code.zip

请记住,您需要保持它们的同步,如果您希望它们在页面加载之间发生变化,则必须研究AJAX和json_decode。