ASP.net c#避免两次打开同一个窗口

时间:2012-04-26 15:14:22

标签: c# asp.net session window state

我正在开发一个Web应用程序。当用户在同一会话中打开同一窗口时,我遇到了一个小问题。

例如:现在,用户打开页面用户并选择我在会话中存储此对象的用户(Session [“user”] = user),如果他在另一个选项卡浏览器中打开同一个窗口并且他选择其他user我覆盖会话值(Session“[”user“] = user).....

我在想解决方案:

  • 避免用户在同一台​​PC上打开同一窗口
  • 为用户打开的每个页面创建唯一ID
你怎么看? 哪个是更好的解决方案?

感谢您的帮助和最诚挚的问候,

3 个答案:

答案 0 :(得分:0)

我认为您无法阻止用户在两个不同的标签页或浏览器中打开同一页面。 因此,如果您需要确保每个窗口都是应用程序中的一个独特的“会话”,您将需要某种唯一ID,可能存储在隐藏的HTML输入中。

答案 1 :(得分:0)

在这种情况下,您必须使用无cookie会话 - 在system.web中的web.config

<sessionState mode="InProc" timeout="20" cookieless="UseUri" />

这样做是将会话ID插入到URL中,以便获得类似www.host.com/(abc15284dndhjkdm)/app.aspx的内容。这是每个标签唯一的,因此用户可以在每个标签上进行单一会话。

编辑: - 这是我在web3.adprs.net/test/test1.aspx上显示的aspx页面的代码,我在下面提到

Test1.aspx

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="test1.aspx.vb" Inherits="WebApplication4.test1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server">
    <title></title> </head>
     <body>
        <form id="form1" runat="server">
        <div>
        Enter User <asp:TextBox ID="user" runat="server"></asp:TextBox>
        <asp:Button ID="go" runat="server" Text="Go" />
        </div>
        </form>
    </body></html>

Test1.aspx.vb

Public Class test1
    Inherits System.Web.UI.Page

    Private Sub go_Click(sender As Object, e As System.EventArgs) Handles go.Click
        Session("user") = user.Text
        Response.Redirect("test2.aspx")
    End Sub
End Class

Test2.aspx

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    Your user from session is <%=Session("user").ToString%>
    </div>
    </form>
</body>
</html>

的web.config

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
    <sessionState mode="InProc" timeout="20" cookieless="UseUri" />
  </system.web>
  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

HTH

答案 2 :(得分:0)

感谢大家的回复。

我阅读了帖子How to differ sessions in browser-tabs?,并找到了几个解决方案来为每个标签生成唯一ID。

解决方案是:

我要复习它们,然后告诉你结果。

如果有人知道另一个解决方案,那么总是很好!

致以最诚挚的问候,