2013-01-23 30 views
0

我讀過堆棧溢出的另一個答案,其中解釋了jsp頁面中由spring mvc存儲​​的會話變量的使用。我可以從js前端訪問由spring mvc存儲​​的會話變量

我想知道的是,我可以從HTML前端的JavaScript代碼中訪問這樣的會話變量,以使用Spring的後端Web應用程序嗎?如果是,那麼我如何從JavaScript訪問會話變量?

回答

1

不,不是直接。

考慮到會話變量存在於內存中的服務器上和JavaScript在客戶在瀏覽器上執行。一旦清楚了,還應該清楚爲什麼你不能直接訪問客戶端JavaScript中的會話變量。

如果您需要在JavaScript代碼中讀取會話變量,那麼可以採取一些方法。

  1. 可以渲染的值作爲頁面上的JavaScript變量
  2. 您創建了一個簡單的AJAX服務(REST/JSON),所以您的網頁可以使JavaScript的使用AJAX對服務器的請求,並得到會話變量值返回
+0

參考答案中的第2點,這樣的服務很容易被黑客濫用嗎?你也可以指點我的一些示例代碼爲你的觀點嗎?謝謝 – Arvind

1

您將不得不迭代會話變量並打印出一個腳本,該腳本將會話屬性設置爲數組。

用於例如,在你的JSP代碼:

添加以下行

<script> 
var session= new Array(); 
<% 
for (Enumeration e = session.getAttributeNames() ; e.hasMoreElements() ;) { 
    Object obj= e.nextElement(); 
    %>session['<%=obj%>']='<%=(String)session.getAttribute(obj)%>';<% 
    } 
%> 
</script> 

這是假設你的會話屬性是字符串。

現在,您可以訪問瀏覽器會話屬性的JavaScript

爲如:session['key1']將給對應的屬性在服務器KEY1會話的字符串表示。

+0

你知道你在例子中的每個循環中調用e.nextElement()兩次,對吧? – pap

+0

oops :-)只是糾正它。 – Subin