如何将javascript值插入到php会话变量中

时间:2012-07-18 11:12:45

标签: php javascript session-variables

我想在javascript函数中插入javascript值到php会话变量中。

这是我尝试过的,但它无效:

function languageChange()
{
 var lang = $('#websites1 option:selected').val();
 <?php $_SESSION['SESS_LANGUAGE']?> = lang;
 alert(<?php echo $_SESSION['SESS_LANGUAGE']?>);
}

2 个答案:

答案 0 :(得分:6)

您无法直接访问它(您的方式)。但是,它可以使用AJAX完成。 这是一个完美的解决方案。

这是HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>1</title>
</head>

<body>
<form id="form1" name="form1" method="post" action="">
    <label for="websites1">Websites</label>
    <select name="websites1" id="websites1">
        <option value="Design">Design</option>
        <option value="Dev">Dev</option>
        <option value="Ecom">Ecom</option>
    </select>
</form>
<script type="text/javascript" src="js/jquery_1.7.1_min.js"></script> 
<script type="text/javascript">

$(document).ready(function() {

    function languageChange()
    {
         var lang = $('#websites1 option:selected').val();

        return lang;
    }


    $('#websites1').change(function(e) {                    

        var lang = languageChange();

        var dataString = 'lang=' + lang;

        $.ajax({

            type: "POST",
            url: "pass_value.php",
            data: dataString,
            dataType: 'json',
            cache: false,
            success: function(response) {

                    alert(response.message);

                }
        });

        return false;

    });

});

</script>
</body>
</html>

这是AJAX部分:

//pass_value.php

<?php session_start();

$_SESSION['SESS_LANGUAGE'] = $_POST['lang'];

$_SESSION['SESS_LANGUAGE'] = 'This is my PHP session var --->'.$_SESSION['SESS_LANGUAGE'];

print json_encode(array('message' => $_SESSION['SESS_LANGUAGE']));
die();


?>

编辑1:

运行代码后,只需从下拉菜单中选择任何其他选项,您将收到一条警报,提供php会话变量的值以及我添加到其中的自定义文本。

编辑2:

如果您想在最后运行我的解决方案,请确保正确指向核心jQuery js文件。我的jquery代码指向src="js/jquery_1.7.1_min.js"。请务必更新。

答案 1 :(得分:0)

Javascript无权访问PHP变量。客户端(Web浏览器/ javascript)只能访问与会话关联的Cookie或Cookieless ID(Querystring)。

会话以这种方式使用,目的是不让客户端修改与会话关联的设置,而无需通过服务器。较不“安全”的方法是将cookie用于所有设置。像语言设置这样的东西可能是存储在cookie而不是会话中的好主意。

为了解决这个问题,您可以创建一个页面,其中包含会话属性名称(如“SESS_LANGUAGE”)以及使用php将其置于会话中的值。我强烈反对这一点,因为任何用户都可以设置任何会话变量。

我能想象到的最好的方法是向一个页面发送一个AJAX调用,说你要更改语言。

被调用的URL将是这样的: changelanguage.php?LANG = EN_US

和changelaguange.php的php代码: $ _SESSION ['SESS_LANGUAGE'] = $ _GET ['lang'];