在 PHP 中使用 javascript 设置会话变量

IT技术 php javascript session
2021-03-11 20:23:51

是否可以使用 Javascript 设置 PHP 会话变量?

6个回答

在 JavaScript 中:

jQuery('#div_session_write').load('session_write.php?session_name=new_value');

在 session_write.php 文件中:

<?
session_start();

if (isset($_GET['session_name'])) {$_SESSION['session_name'] = $_GET['session_name'];}
?>

在 HTML 中:

<div id='div_session_write'> </div>
如果人们使用会话变量期望它们只能设置在服务器端,这可能是一个安全风险。
2021-05-11 20:23:51

会话存储在服务器端,因此您无法从 JavaScript 向其添加值。您在客户端获得的只是包含 id 的会话 cookie。一种可能性是将 AJAX 请求发送到将设置会话变量的服务器端脚本。jQuery.post()方法的示例

$.post('/setsessionvariable.php', { name: 'value' });

当然,您应该小心暴露此类脚本。

如果您想允许客户端对持久数据进行操作,那么最好只使用 cookie。这就是cookies的设计目的。

但他们提出了限制@lese majeste。所以我希望将我的 javascript 数组从一个页面带到另一个页面
2021-04-19 20:23:51

或者通过纯 js,也可以在 StackOverflow 上查看: JavaScript post request like a form submit

但是为什么要尝试用 js 设置 $_session 呢?任何 JS 变量都可以由玩家使用一些 3rd 方工具(firebug)修改,因此任何玩家都可以修改 $_session[]! 而且PHP不能给js任何秘密代码(甚至[滚动]加密)返回,它都是可见的。jquery或者AJAX都帮不上忙,最后都是js。

这在网络游戏设计中经常发生。(也许有点博弈论?原谅我,我有一个大师并且喜欢使用理论:))就像在crimegameonline.com中一样,我用PHP初始化了一个小游戏拼图,将初始板保存在 $_SESSION['foo' ]。然后,我使用 php [make html that] 显示初始拼图开始。然后,js 接管,在玩家移动时观察按钮和修改元素 xy。我不想玩客户端 - 服务器(如 WOW)并询问服务器“嘿,我的玩家想要移动到 xy,我该怎么办?”。这是很多带宽,我不想要涉及的服务器。

每次玩家出错(或死亡)时,我都可以发送 POST。播放器可以阻止传出 POST(并更改本地 JS 变量以使其忘记输出计数)或简单地修改传出 POST 数据。是的,人们会这样做,尤其是在涉及真钱的情况下。

如果游戏很小,您可以发送每个移动(按钮单击)的后更新,单向,以及最后两个移动的后变量。然后,服务器完整性检查最后并在 $_SESSION['allMoves'] 中添加新内容。如果游戏很大,您可以发送所有先前移动的“中途”更新,并查看它是否与最终更新列表中的匹配。

然后,在 js 认为我们赢了之后,添加或修改一个按钮来更改页面:

document.getElementById('but1').onclick=Function("leave()");
...
function leave() {
    var line='crimegameonline-p9b.php';
    top.location.href=line;
}

然后新页面的 PHP 查看 $_SESSION['init'] 并通过每个 $_SESSION['allMoves'] 播放,看看它是否真的是赢家。服务器(PHP)必须决定它是否真的是赢家,而不是客户端(js)。

ps:人们可能会使用 AJAX 来(获取或发布)提交单个动作,而无需转到操作页面,将它们放入一个会话变量(无文本/标题信息)的操作 .php 页面。
2021-04-16 20:23:51

您不能直接从 Javascript 操作会话值 - 它们只存在于服务器上。

您可以通过使用 AJAX 调用让您的 Javascript 在会话中获取和设置值。

也可以看看