设置和获取会话变量

时间:2015-02-20 15:48:48

标签: php session

我正在尝试在php脚本中设置会话变量并获取变量 一个javaScript。

在php程序中我放了一个echo命令来查看变量 生成。什么都没发生。

在javascript中我尝试将变量写入屏幕,但我什么都没看到。如果我在get命令周围放置单引号,我只是显示该命令。

PHP:

$full_name = $_POST['Full_Name']; // required
$names = explode(" ", $full_name);
$_SESSION['myvar'] = $names[0];
echo ($names[0]);

的javascript:

<script type="text/javascript">
var name = @Session["myvar"];
document.write(name);
</script>

3 个答案:

答案 0 :(得分:0)

用PHP编写JavaScript ...嗯...作为一个程序员,继承了其他程序员这样做的代码......请不要。当你开始混合语言时,很难看到发生了什么。

关于你的实际问题......一般来说,你把东西放入你想要保密的会话中,或者你已经正确保护的东西,比如谁登录的用户ID值,这样当他们转到下一页,您在会话中看到用户ID,并且您信任该数据,因为它来自您的服务器而不是用户。 POST,GET和COOKIE数据不安全,因此您不相信用户发送给您的内容。

在任何情况下,对于您希望PHP和Javascript都可访问的内容,如果您不使用Web服务,我建议使用Cookie可能是更好的做法。

setcookie('FirstName',$_SESSION['myvar']);

http://php.net/manual/en/function.setcookie.php

不可否认,使用JavaScript获取cookie值本身就很痛苦,但是人们已经为你编写了代码,所以它不应该那么痛苦:

Get cookie by name

function getCookie(name) {
    var value = "; " + document.cookie;
    var parts = value.split("; " + name + "=");
    if (parts.length == 2) return parts.pop().split(";").shift();
}

var name = getCookie('FirstName');

[编辑] 我还会说另一张海报的answer,将其放入HTML中的数据属性中,也是一种很好的做法,比写入JS更清晰直接

<body data-first-name="<?php echo htmlspecialchars($firstName) ?>">

答案 1 :(得分:0)

如果要使PHP可扩展,在JS脚本中直接使用PHP实际上并没有用。

像这样使用

  

myprintoutscript.js

function writeOnDocument(name){
    document.write(name);
}

在大多数情况下,最好使用变量从外部调用js函数(在您的情况下是会话)

  

的index.php

<script>
    //referencing to function in myPrintOutScript.js
    writeOnDocument("<?= $_SESSION['myvar'] ?>");
</script>

或读出html数据属性,例如正文

  

的index.php

<body data-session-name="<?= $_SESSION['myvar'] ?>">

并从脚本中调用它:

  

windowIsLoadedScript.js

var body = document.getElementsByTagName("BODY")[0],
    name = body.getAttribute("data-session-name");

 //referencing to function in myPrintOutScript.js
 writeOnDocument(name);

将事物分开的越多,就越容易使构建块相互叠加。

答案 2 :(得分:-1)

在php文件的开头写session_start();。 然后将变量捕获到这样的js中。

<script type="text/javascript">
    var name ="<?php echo $_SESSION['myvar'];?>";
    document.write(name);
   </script>