2013-01-23 33 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