用户注销时数据库连接需要时间吗?或从asp.net问题注销

Posted

技术标签:

【中文标题】用户注销时数据库连接需要时间吗?或从asp.net问题注销【英文标题】:Database connection take time when user log-off? or signout from asp.net problem 【发布时间】:2011-02-03 13:39:54 【问题描述】:

我有 ASP.NET 应用程序,

当用户注销并立即尝试再次登录时,它失败并且页面正在等待,20 秒后页面登录,我认为与数据库的连接,例如 Access,inst 关闭。 当用户注销以关闭所有数据库连接实例时我需要做什么。 当用户单击注销按钮时,我正在使用此代码:

protected void closeCon()

    //to close access
    OleDbConnection sqlconConnection = (OleDbConnection)DatabaseConnection.Instance.GetConnection();

    sqlconConnection.Close();
    // to close sql server
    SqlConnection sqlconConnection1 = (SqlConnection)(SqlConnection)DatabaseConnection.Instance.GetConnection();

    if (sqlconConnection1.State != ConnectionState.Closed)
    
        sqlconConnection1.Close();        
    

     Session.Abandon();
    HttpCookie ObjCookie = new HttpCookie("ourcase");
    ObjCookie.Expires = DateTime.Now;
    HttpContext.Current.Response.Cookies.Add(ObjCookie);
    Response.Redirect("/login/default.aspx");
    System.Web.Security.FormsAuthentication.SignOut();

【问题讨论】:

当您一次收到多个请求时,您的网站将严重失败。你应该完全重新设计你的数据库连接; 不共享连接实例 @ abatishchev,我关闭了我打开的所有连接,但是,有没有办法关闭任何打开的连接? 大声笑 - @abatishchev,也许与其急于成为第一个编辑,不如先花点时间检查一下所有的拼写错误? @Tony Toews 我在登录时遇到问题,当用户注销时,然后立即尝试登录,它失败了,他等待 10 秒或 20 秒。 Session.Abandon(); HttpCookie ObjCookie = new HttpCookie("ourcase"); ObjCookie.Expires = DateTime.Now; HttpContext.Current.Response.Cookies.Add(ObjCookie); Response.Redirect("/login/default.aspx"); System.Web.Security.FormsAuthentication.SignOut(); ; 我正在使用所有可能的方法来清除删除烹饪并重新登录的机会,但是当再次登录时它失败了。 我看到这里提到了我的名字,但我没有看到我原来的评论,所以我不知道我输入了什么。 【参考方案1】:

dbConn.Close() 应该关闭数据库连接。

或者,在您使用数据库连接的地方,您可以使用using 语句,该语句将在连接对象完成后自动关闭和处置。这是伪代码:

using (OleDbConnection dbConn = new OleDbConnection())

    // do your db work here

【讨论】:

@ardman,有没有办法在用户注销时强制关闭 d.b? @safi:假设您有一个LogOff 方法,您可以在您的LogOff 方法中添加对Close 方法的调用。但是,老实说,您不应该在这段时间内保持数据库连接打开。 @ardman,那么最好的方法是什么?用户注销时结束所有会话? @safi:使用using 方法,以便它自动处理数据库关闭。 @safi:连接/查询应该只打开足够长的时间来获取数据。之后,它应该立即关闭。不应留下任何连接以通过注销方法进行清理。【参考方案2】:

类似于@Ardman said,始终将连接包装在using 语句中。

using (OleDbConnection dbConn = new OleDbConnection())

    // do your db work here

但是由于 Access supports connection pooling,您应该在每次访问数据库时打开和关闭连接。

不是每次用户登录和注销时。

【讨论】:

你确定吗? Jet/ACE 的问题在于创建 LDB(锁定)文件(或写入已被其他用户使用的文件)是一个非常昂贵的过程,因此使用 Jet/ACE,您通常使用持久连接而不是打开和反复关闭它。不过,我不确定连接池如何与之交互。我对每个用户都有自己的连接的想法持谨慎态度,而不是有一个供所有用户使用的***连接。请记住,它只是 Jet/ACE,而不是服务器数据库... 我登录有问题,当用户退出,然后立即尝试登录,失败,他等待10秒或20秒。Session.Abandon(); HttpCookie ObjCookie = new HttpCookie("ourcase"); ObjCookie.Expires = DateTime.Now; HttpContext.Current.Response.Cookies.Add(ObjCookie); Response.Redirect("/login/default.aspx"); System.Web.Security.FormsAuthentication.SignOut();;我正在使用所有可能的方法来清除缓存以删除烹饪并重新登录但再次登录时失败。

以上是关于用户注销时数据库连接需要时间吗?或从asp.net问题注销的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Identity 注销另一个用户

我用ASP.NET做网页登陆,注销和注册,如何解决登陆权限控制?给点代码或者详细思路,谢谢,在线等....急用

使用 asp.net 中的会话从帐户注销时遇到问题

如何在 cookie 上保留 ASP.NET 身份声明直到注销?

如何在 OWIN ASP.NET MVC5 中注销用户

用户在 ASP .NET MVC 5 中注销时如何清除所有会话元素?