使用 jquery 设置时无法在 vb 页面上获取会话
Posted
技术标签:
【中文标题】使用 jquery 设置时无法在 vb 页面上获取会话【英文标题】:cannot get the session on vb page when it set using jquery 【发布时间】:2019-06-12 06:57:09 【问题描述】:我有一个 img 按钮。单击它时,我使用 jquery 设置会话值。但是我无法获得关于 vb 代码的会话。我的过程是这样的,用户点击图片后,我设置了会话。当用户打开弹出页面并返回页面时。我需要检查会话以做某事。但是在 vb 代码中,会话什么都不是。有人会告诉我该怎么做。
以下代码调用函数:
<asp:Image ID="img" runat="server" onclick="SetSession(hdID);" ImageUrl="pic_bottle.gif" />
jquery 脚本:
function SetSession(hdID)
var hd = $('#' + hdID);
var hdValue = hd.val();
if (hdValue == "s")
$.session.set('UpdateProdOrder', -1);
else
var hdProdID = $('#hdProdID').val();
$.session.set("UpdateProdOrder", hdProdID);
alert($.session.get("UpdateProdOrder"));
后面的vb代码永远得不到会话
If Not Session("UpdateProdOrder") Is Nothing Then
'do something
updateOrder()
end if
【问题讨论】:
虽然下面的答案无疑解决了具体问题,但我的猜测是正确的做法是重新设计数据边界,以便客户端不设置会话变量。见Insecure Direct Object Reference。 【参考方案1】:localStorage 和 sessionStorage 属性允许在 Web 浏览器中保存键/值对。
sessionStorage 对象仅存储一个会话的数据(关闭浏览器选项卡时数据被删除)。
这些值在客户端维护,但您正试图在服务器端检索它。会话变量在服务器端
解决方案:
方法一:
您必须进行一点 ajax 调用才能与服务器对话以进行设置。 please check it out
方法二:
使用 Javascrip 分配 ASP.NET 会话变量t.
<script type="text/javascript">
function SetSession(hdID)
var hd = $('#' + hdID);
var hdValue = hd.val();
if (hdValue == "s")
'<%Session["UpdateProdOrder"] = "' + -1+ '"; %>';
else
var hdProdID = $('#hdProdID').val();
'<%Session["UpdateProdOrder"] = "' + hdProdID+ '"; %>';
alert('<%=Session["UpdateProdOrder"] %>');
</script>
使用 Javascript 访问 ASP.NET Session 变量:
<script type="text/javascript">
function GetSession()
var updateProdOrder= '<%= Session["UpdateProdOrder"] %>';
alert(updateProdOrder);
</script>
【讨论】:
【参考方案2】:您不能直接使用 javascript 更改服务器端 Session
对象。您需要以某种方式将其发送到服务器。这可以通过将图像更改为ImageButton
并执行 PostBack 来修改 Session 对象来完成。但是由于您似乎在hdID
中有一些数据。您不能仅使用 ImageButton 将其发送到服务器,您需要 HiddenField
<asp:ImageButton ID="ImageButton1" runat="server" OnClientClick="SetSession(hdID);"
ImageUrl="pic_bottle.gif" OnClick="ImageButton1_Click" />
<asp:HiddenField ID="HiddenField1" runat="server" />
<script type="text/javascript">
var hdID = 'test';
function SetSession(hdID)
$('#<%= HiddenField1.ClientID %>').val(hdID);
</script>
然后在后面的代码中
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
Session["UpdateProdOrder"] = HiddenField1.Value;
Label1.Text = string.Format("Session value is now '0'", Session["UpdateProdOrder"]);
您也可以在不使用 javascript SetSession
的情况下执行此操作,但这取决于页面其他部分使用 hdID
的位置和时间。
【讨论】:
以上是关于使用 jquery 设置时无法在 vb 页面上获取会话的主要内容,如果未能解决你的问题,请参考以下文章