将 SESSION 变量传递给 JS

Posted

技术标签:

【中文标题】将 SESSION 变量传递给 JS【英文标题】:Passing a SESSION variable to JS 【发布时间】:2014-03-14 09:32:37 【问题描述】:

好的,这里有一些看似微不足道的东西,但它一直让我头疼,我现在一定有某种心理障碍。

我想将一个 SESSION 变量传递给 JS,然后最终传递到另一个页面......这只是我现在担心的第一部分,因为我什至无法得到一个好的“警报”。变量为空...“xxxxxx 处的页面显示 ____”,即使用户名显示在 html 跨度标记中。

所以,这是我页面上的适用代码。 编辑 - 对于那些问我为什么要这样做的人,我在 (this) 帖子上阅读了它...

编辑:已解决。最好的方法是:

var player = "<?php echo $_SESSION['username']; ?>";

不需要 jQuery 或其他代码。它简单而直接,让我感到羞耻的是只坚持另一篇文章中提出的一个解决方案。 回答其他一些问题:我确实已经在文件顶部有 start session() 。该脚本位于 HTML/PHP 代码之后。 *** ... HTML 的东西...

You are <span id='username'><?PHP echo $_SESSION['username']?></span></div>

...更多 HTML...

<script>
    function rollpublic()
    
... some declarations...
        var player = document.getElementById("username").innerHTML;
        alert (player);
more JS 
</script>

【问题讨论】:

您何时以及如何致电rollpublic?在span之前还是之后? 调用rollpublic时控制台中是否有任何错误消息? “我想将一个 SESSION 变量传递给 JS,然后最终传递到另一个页面”——这是什么意思? “其他页面”可以直接从会话中访问,不是吗? 什么时候设置会话变量?它必须在创建页面时进行设置——如果您使用 AJAX 进行设置,则不会对已发送到客户端的页面产生影响。 你试过var player = "&lt;?php echo $_SESSION['username']; ?&gt;"; 【参考方案1】:

编辑

旁注:可能是您的会话名称未出现的原因之一,可能是因为您的页面中没有session_start();,您发布的代码中也没有提及它。

没有看到完整的代码,很难确定它。

但是,这是我使用以下代码执行的成功测试:(第 1 页和第 2 页)

第 1 页:

<?php
session_start();
$_SESSION['username'] = "USERNAME";
?>

<a href="sessions_check.php">Check session name</a>

第 2 页: (sessions_check.php) 将回显并提醒会话名称。

<?php
session_start();
?>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>

<script>
    $(document).ready(function()
var player = "<?php echo $_SESSION['username']; ?>";

alert (player);

    );
</script>

You are <span id='username'><?PHP echo $_SESSION['username']?></span></div>

出现在 HTML 源代码中:var player = "USERNAME";

You are &lt;span id='username'&gt;USERNAME&lt;/span&gt;&lt;/div&gt;

注意:session_start(); 需要在所有使用会话的页面中才能正常工作。

(原始答案)这对我有用:

<?php
session_start();
$_SESSION['username'] = "USERNAME";
?>

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
    $(document).ready(function()
var player = "<?php echo $_SESSION['username']; ?>";

alert (player);
    );
</script>

You are <span id='username'><?PHP echo $_SESSION['username']?></span></div>

【讨论】:

是的!感谢您提供如此全面的答案! - 希望当未来的菜鸟搜索这个常见问题时,他们会看到这个。我确实在顶部的“include”文件中开始了会话,所以不是这样。我最初决定使用我使用的代码是因为 *** 上的帖子说你不能直接从 JS 访问 $_SESSION (它们是正确的),你必须首先在屏幕上回显变量,使其隐藏,然后用 innerHTML 抓取它。反正现在好了!谢谢。【参考方案2】:

你可以通过ajax调用会话:

function getSession()
   var session;
   $.get('someUrlThatReturnSession', function(sessionData)  
      session = sessionData;
   );

   return session;

【讨论】:

【参考方案3】:

您可以将 SESSION 变量分配给 javascrip 变量..

<script>
function myFunction()
    var a = <?php echo $_SESSION['var'] ?>;
    alert(a);

</script>

如果您需要更多帮助,请告诉我..

【讨论】:

在其周围添加一些引号可能很聪明。 另外,这部分是可选的,但将; 放在语句的末尾也很聪明。【参考方案4】:

如果你使用 Angular JS,你可以使用this approach。 (将 PHP var 提供给隐藏输入的 ng-init 参数)

【讨论】:

以上是关于将 SESSION 变量传递给 JS的主要内容,如果未能解决你的问题,请参考以下文章

将Array从JS传递给PHP并创建SESSION变量

PHP MVC 最佳实践 - 将 Session 变量从控制器传递给模型类或直接在模型中访问

dompdf:模板和 $_SESSION 变量

ExpressJS 3.0 如何将 res.locals 传递给玉视图?

通过 JSON 对象将 Session 对象中的字节数组传递给 Web 服务(Asp.Net 2.0 asmx)

如何在 laravel 5.8 中将变量传递给路由?