将 ASP.NET 会话传递给 jQuery

Posted

技术标签:

【中文标题】将 ASP.NET 会话传递给 jQuery【英文标题】:Pass ASP.NET Session to jQuery 【发布时间】:2020-07-19 20:26:36 【问题描述】:

我正在使用 asp.net、vb.net 和 jquery。我需要查看我的会话是否存在于 jQuery 中。我知道我不能在 jQuery 中使用会话,因为 javascript 是客户端,而会话是服务器端。因此,我认为可以将会话信息存储在标签中。

这是我正在尝试但不太奏效的方法:

所以在 Page_Load 上,我将文本框设置为会话(当会话存在时等于“真”):LblSession.Text = Session("MySession")

同样在 Page_Load 上,如果会话过期(设置为 15 分钟),那么我希望标签将会话更新为 null / false。

If Not Session("MySession") Then LblSession.Text = Session("MySession")

但是,当我的会话结束时,此标签不会更新为会话是否存在。

在我的 jQuery 上,我获得了会话的值(如果存在,则为 True,否则为 false 或 null):var mySession = $("#LblSession").text();

//Check to see if the session is true
if (mySession == "True") 
    'do something if session exists'
 else 
    'do something if session does not exist'

这是我的最终目标,能够查看会话是否存在或是否从我的 jQuery 中过期。

【问题讨论】:

会话计时器在您与服务器和会话交互时重置 - 因此页面加载将重置超时(根据您的信息为 15 分钟),任何其他请求也是如此。当会话过期时,当一个新的请求进入页面时创建一个新会话(新会话令牌)(不要与身份验证混淆) - 您可以比较会话令牌以查看是否有新会话 - 会话过期时其中的所有数据都将从服务器中删除。您需要另一个“管理” api 单独查询以返回此信息 - 否则它有点像薛定谔的猫 如果您的最终目标是获得会话状态的实时信息 - 您无法向正在监视的会话发送请求 - 它会重置计时器,因此您创建了一个保持活动的请求。您需要创建一个单独的应用程序 - 可以访问会话数据,但本身可以通过另一个会话访问 - 您可以将要监视的会话令牌传递给这个其他 API,然后它可以查找会话以查看其状态.你为什么要这个?? 【参考方案1】:

您对 ID html 标记的 Javascript 调用可能是错误的,请检查 ID 控件是否存在:

<asp:Label runat="server" ID="LblSession"></asp:Label>
// render as:
<span id="[if inside Masterpage ex. ContentMain_]LblSession"></span>
$("#LblSession").text();

检查 web.config 的配置,标签 clientIDMode 的值,ID 取决于此设置和页面结构,例如,如果您有母版页和容器控件。查看 html 生成的代码,获取呈现的 html 控件的客户端 ID 标签。

<pages clientIDMode="Predictable"></pages>

更多信息:(https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.control.clientidmode?view=netframework-4.8)

最好使用隐藏字段,渲染为隐藏输入:(https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.hiddenfield?view=netframework-4.8)

<asp:HiddenField id="HiddenField1" runat="server" value="1"/>

【讨论】:

以上是关于将 ASP.NET 会话传递给 jQuery的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET Web 应用程序之间传递会话数据

将 C# ASP.NET 数组传递给 Javascript 数组

将 C# ASP.NET 数组传递给 Javascript 数组

将模型传递给 asp-for | ASP.net 核心

ASP.Net将json传递给动作,但服务器端的数据为空

将数组传递给 ASP.NET Core 中的数据属性