2011-11-15 102 views
4

是否可以訪問JavaScript中創建的會話變量,以及如何在JavaScript中複製此PHP代碼?訪問來自JavaScript的會話變量

if(empty($_SESSION['name'] { 
    echo 'foo'; 
} 
+0

使用會話變量的一點是,他們是不可見的客戶端... – Esailija

+0

它有點作爲哈姆,是否有任何缺點能夠訪問他們? –

+0

如果可以從瀏覽器中任意檢查其會話變量,那麼如果有數據確實意味着隱藏而不是「foo」,則可能會出現一些問題。 – Esailija

回答

4

你可以通過Ajax訪問一個網頁,其中將返回變量值:

使用jQuery:

$.get('myVariable.php', function (data) { 
    alert(data) 
}); 

而PHP頁面(myVariable.php):

<?php echo $_SESSION['user_id']; ?> 
0

是否有可能從javascript訪問PHP做會話變量

號,他們住在你的Web服務器的內存中,所幸的JavaScript也進不去。

0

會話變量存儲在服務器上。使用javascript(客戶端)訪問它們的唯一方法是使用AJAX向後端發出請求,然後將該值返回給您。

0

不,你不能。會話變量存儲在服務器中,而不是存儲在客戶端中。你可以做的最接近的事情是在php腳本中驗證會話變量並用ajax調用它。

1

好... ajax是很好的一切,但如果你真的想要,你可以將它們作爲變量打印在標籤中,並通過js以這種方式訪問​​它們。我從來沒有做過與會話變量,但我以這種方式打印出來,從PHP(MySQL的)值的所有時間

+0

我不會將它用於任何安全/隱私數據。客戶端不能直接訪問會話變量,但是如果您將它們發送給JavaScript,然後在那裏使用邏輯進行身份驗證,則可能會遇到問題。它很容易「僞造」javascript變量,所以你不能指望它們100%準確 – Landon

3

很抱歉,但你不能:(

首先一點背景:

在PHP

中的會話支持由一種方法來保存之後的請求某些數據。這使您可以建立更靈活的應用並提高網站的吸引力。

訪問者訪問你的網站被分配一個唯一的ID,即所謂的會話ID。這可以存儲在用戶端的cookie中,也可以在URL中傳播。

會話支持允許您註冊任意數量的變量以跨請求保留。當訪問者訪問您的站點時,PHP會自動檢查(如果session.auto_start設置爲1)或您的請求(顯式地通過session_start()或通過session_register())隱式檢查特定會話ID是否與請求一起發送。如果是這種情況,則重新創建之前保存的環境。 http://www.php.net/manual/en/intro.session.php

基本上會話涉及存儲數據的服務器端並存儲在cookie中的客戶端的ID。這意味着JS理論上可以訪問cookie,但是您只需訪問PHPSESSID變量(會話ID)即可。

要實現你正在嘗試做的事,你可以使用ajax。 (與流行的誤解相反),ajax請求仍然向服務器提供訪問cookie和會話所需的所有信息。

所以,簡單地作出這樣getName.php一個服務器端腳本包含:

if(!empty($_SESSION['name'])) { 
    echo $_SESSION['name']; 
} 

而且使用AJAX來得到的迴應:)

+0

或者只是做Digital Precision說的並跳過AJAX。 –

3

如果你設置你的JavaScript來被PHP解析,您可以訪問會議剛瓦爾一樣可以用PHP:

// Test.php 
<?php session_start(); ?> 

<?php $_SESSION['foo'] = 'bar' ?> 

<script type="text/javascript"> 
    alert('<?php echo $_SESSION['foo'] ?>'); 
</scrip> 

<?php var_dump($_SESSION['foo']) ?>