2010-08-28 130 views

回答

23

在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> 
+20

如果人们使用会话变量期望他们只能被设置为服务器端,这可能会带来安全风险。 – 2014-04-30 04:06:15

17

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

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

你应该,当然,谨慎看待这种暴露脚本。

6

看到,如果你想允许持久性数据的客户端操作,那么它最好还是使用cookies。这就是Cookie的设计目的。

+0

但他们提出了限制@lese majeste。所以我期待把我的JavaScript数组从一个页面转移到另一个页面 – saikiran 2014-08-05 15:56:43

0

不可能。因为JavaScript是客户端,会话是服务器端。要做与PHP会话相关的任何事情,你必须去服务器。

3

或纯JS,也看到StackOverflow上: JavaScript post request like a form submit

但为什么尝试设置$ _SESSION与JS?任何JS变量都可以被玩家用 某些第三方工具(萤火虫)修改,因此任何玩家都可以修改$ _session []! PHP不能给js任何密码(甚至是[滚动]加密)返回,这一切都是可见的。 Jquery或AJAX无法帮助,最终都是js。

这发生在网络游戏设计很多。 (也许有点博弈论?原谅我,我有一个硕士和爱把理论用:))在Crimegameonline.com,像我在 用PHP初始化迷你游戏拼图,保存初始板在$ _SESSION ['foo “]。 然后,我使用PHP来[使HTML]显示最初的难题开始。然后,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 [“初始化”],并播放直通各 $ _SESSION ['allMoves']查看它是否真的是赢家。服务器(PHP)必须决定它是否真的是赢家,而不是客户端(js)。

+0

ps:可能会使用AJAX提交(获取或发布)单个动作,而无需转到动作页面,然后转到动作.php页面,让它们进入一个会话变量(没有文本/标题信息)。 – dako 2012-10-08 23:21:33

1

一个SI设置会话变量的多种方法是通过向另一个PHP文件发送请求。这里不需要使用Jquery或任何其他库。

考虑我在那里,我创造SESSION变量(比如$_SESSION['v']=0)如果没有创建SESSION否则我会加载其他文件的index.php文件

代码是这样的:

session_start(); 
if(!isset($_SESSION['v'])) 
{ 
    $_SESSION['v']=0; 
} 
else 
{ 
    header("Location:connect.php"); 
} 

现在count.html我想成立这个会话变量为1

含量count.html

function doneHandler(result) { 
    window.location="setSession.php"; 
} 

count.html JavaScript部分,发送请求t o另一个PHP文件(比如setSession.php),我可以访问会话变量。

所以在setSession.php将写

session_start(); 
$_SESSION['v']=1; 
header('Location:index.php'); 
0

这样做时要小心,因为它是一个安全隐患。攻击者可以将数据反复注入会话变量,这是存储在服务器上的数据。这会让你看到有人用垃圾会话数据重载你的服务器。

这里的,你会不会想要做的代码的例子..

<input type="hidden" value="..." name="putIntoSession"> 
.. 
<?php 
$_SESSION["somekey"] = $_POST["putIntoSession"] 
?> 

现在,攻击者可以只改变putIntoSession的值并提交表单十亿倍。繁荣!

如果您采取创建AJAX服务的方法来执行此操作,您需要确保强制执行安全措施以确保无法重复请求,截断收到的值并执行一些基本的数据验证。