会话变量在跨页面的启动会话中不可用

时间:2019-02-17 10:42:36

标签: php session

目标是当用户使用session_start()从页面的6个选择下拉框中选择db搜索过滤器条件并将SESSION变量设置为6个select-box值时,刷新后在页面之间保留一些数据。用户选择时,单击搜索按钮将调用Laravel控制器动作,其中SESSION为session_start()开始,并且为SESSION设置了6个选择框变量。

目标是从单击搜索按钮时填充的会话变量中重置选择框,保留用户选择的选择框选择标准,因此他们不必再次重新选择6个选择框。这些选择框选择值存储在会话变量中。

返回成功搜索后的刷新时,将在masterlayout.blade html部分中读取SESSION变量,以编程方式重新选择用户输入的先前搜索过滤器选择,因为rerun页面使用masterlayout.blade呈现,包括导航刀片。

在Laravel模板系统的masterlayout.blade(包括具有选择框的nav.blade)中,我在刷新用户搜索时读取这些SESSION变量,然后从控制器设置SESSION变量从按钮中调用,然后将选择框重置为SESSION变量中的值。

但是,该masterlayout.blade模板是从其他页面调用的,因为它和search-nav出现在用户进行过滤搜索之前或之后可能用于搜索或不用于搜索的其他页面上。

问题是,当请求其他页面时,即使在搜索后,SESSION变量似乎也不可用,重置为空或其他内容--我无法弄清楚,因为我没有销毁会话,因此应该从设置后的任何页面。

但是当请求其他页面时,出现_SESSION变量不可用错误。

  1. 如果您知道如何解决此问题,请告诉我。

  2. 如果您知道如何更好地在页面之间保留选择框值,请告诉我。我不想让数据库执行此操作,但是也许有一种JavaScript方法可以在页面之间保留变量。

谢谢

1 个答案:

答案 0 :(得分:0)

这是在控制器中,通过单击按钮调用控制器来访问帖子数据

//colvals
session_start();
        $bidded=$_GET["bidded"];
        $_SESSION["bidded"] = $bidded;

        $state=$_GET["state"];
        $_SESSION["state"] = $state;

        $city=$_GET["city"];
        $_SESSION["city"] = $city;

        $biddertype=$_GET["biddertype"];
        $_SESSION["biddertype"] = $biddertype;

        $job=$_GET["job"];
        $_SESSION["job"] = $job;

        $subjob=$_GET["subjob"];
        $_SESSION["subjob"] = $subjob;

在搜索过滤器导航页面中,通过以下操作设置先前用户搜索(存储在控制器的上述代码中)的选择框值:

<script> 
    document.getElementById("bidded").addEventListener("load", mySelect());
    document.getElementById("state").addEventListener("load", mySelect());
    document.getElementById("city").addEventListener("load", mySelect());
    document.getElementById("biddertype").addEventListener("load", mySelect());
    document.getElementById("job").addEventListener("load", mySelect());
    document.getElementById("subjob").addEventListener("load", mySelect());

    function mySelect() { 
    document.getElementById("<?php echo $_SESSION['bidded'];?>").selected = "true";
    document.getElementById("<?php echo $_SESSION['state'];?>").selected = "true";
    document.getElementById("<?php echo $_SESSION['city'];?>").selected = "true";
    document.getElementById("<?php echo $_SESSION['biddertype'];?>").selected = "true";
    document.getElementById("<?php echo $_SESSION['job'];?>").selected = "true";
    document.getElementById("<?php echo $_SESSION['subjob'];?>").selected = "true";
    }

</script> 

在这种情况下,JavaScript会话和局部变量没有任何用处,因为刷新页面时,它将读取选择框的默认状态并覆盖在提交搜索输入之前存储的选择框。

问题是,当我没有销毁会话时,其他页面会使用相同的模板,并且抱怨没有定义_SESSION变量,但是我猜只有一个脚本可以访问它,即使这些页面都没有。需要表单提交才能再次设置会话过滤器选择值。

由于这是一个独特的功能,它可能最终拥有自己的模板,因为担心其他100个页面会话变量比另一个模板更像是PITA。我会试一下cookie,但是不想在用户端公开查询数据。

感谢您的输入...