【问题标题】:Using $_SESSION with window.open()将 $_SESSION 与 window.open() 一起使用
【发布时间】:2022-08-23 22:36:52
【问题描述】:

我想知道在 Javascript 中使用 window.open() 时 $_SESSION 变量是否会传递给网页。

我有:

<?php
    session_start();
    $_SESSION[\"cookie\"] = \"12345\";
?>

在contact.php中,然后

window.open(\"./contact-form-submitted.php\", \"_self\");

在contact.js中,并且:

<?php
    session_start();
    if ($_SESSION[\"cookie\"] == \"12345\") {
        echo \"test\";
    }
?>

在contact-form-submitted.php 中。我正在使用 fetch() 将联系信息提交到我的后端。当 contact-form-submitted.php 加载时,我收到以下错误,

Warning: Undefined array key \"cookie\" in /Users/marcofusco/Desktop/Cloud Innovations/website v2/contact-form-submitted.php on line 3

这意味着会话变量没有被传递。这是为什么?

谢谢。

  • 如果 PHP 页面是同一个站点的一部分并且在同一个用户会话中,那么它应该可以正常工作。如果您在第一个脚本之前调用第二个脚本,它应该不起作用。
  • 这回答了你的问题了吗? window.open doesn\'t open in same session
  • @YasserCHENIK 该问题仅适用于 Internet Explorer,因此不再相关。据我所知,所有现代主流浏览器都会在调用 window.open 时在同一会话中打开一个新选项卡。它似乎也特定于页面显示在嵌入在 Windows 应用程序中的 Web 浏览器控件中的情况。在将其提名为副本之前,您实际上是否阅读了比标题更进一步的内容?
  • @ADyson 它现在正在工作。我不知道为什么,但我刷新了页面并且它工作正常。
  • 你刷新了哪个页面?如果您刷新了contact.php,那么显然它将创建会话值。

标签: javascript php


【解决方案1】:

首先,您已经两次声明了session_start()。它应该放在所有文件都可以访问的顶部。另外,您不应该启动 session_twice。我建议你从contact_form_submission 中删除session_start()

您正在尝试使用 javascript 请求吗? 如果是这样,我已经尝试过类似的方法并且效果很好。 首先检查是否设置了会话。

if (isset($_SESSION['cookie'])){ //do something }

【讨论】:

    【解决方案2】:

    感谢@ADyson,我设法理解了您的问题: 您正在使用 session_start() 两次。 因此,作为解决方案,您必须将 contact.js 代码替换为:

    <?php
        if ($_SESSION["cookie"] == "12345") {
            echo "test";
        }
    ?>
    

    不要重置您的会话!

    【讨论】:

    • 这与所需要的完全相反。 Session_start() 必须在需要访问 Session 的每个脚本中使用。尽管它的名字,该函数实际上允许访问当前脚本中的现有会话(如果有的话)——它不会每次都启动一个新会话。阅读手册而不是假设或猜测:php.net/manual/en/function.session-start.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2019-08-13
    相关资源
    最近更新 更多