2010-08-28 126 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服務的方法來執行此操作,您需要確保強制執行安全措施以確保無法重複請求,截斷收到的值並執行一些基本的數據驗證。