使用 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 页面上获取会话的主要内容,如果未能解决你的问题,请参考以下文章

jquery在加载时获取iframe内容的高度

从动态 htmlTable 获取 vb.net 中的数据

VB6.0 获取WebBrowser当前打开页面的网址

使用 jQuery 在页面加载时检测鼠标悬停

脚本无法在 AJAX 页面加载时修改 jQuery Mobile 页面上的页脚?

history.pushState URL与jquery的交互导致页面获取失败?