| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1617 人关注过本帖
标题:请教session_end()问题
只看楼主 加入收藏
smace
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-6-3
收藏
 问题点数:0 回复次数:1 
请教session_end()问题

请问一下,我在global.asax文件里的session_start()建立了一个数据库连接,要在session_end()里退出,请问怎样可以实现?我试了很多次,session_end()都不会执行,这是使用户登陆的时候建立数据库连接,用户退出登陆的时候或关闭页面的时候断开连接的,有谁知道怎样让session_end()执行的教个,谢谢!
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="DBConn" %>
<%@ Application Language="C#" %>


<script Language="C#" runat="server">
SqlConnection conn;

void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码

}

void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码

}

void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码

}

void Session_Start(object sender, EventArgs e)
{
//SqlConnection conn;
string ConnStr = "Data Source=.;database=RBAC;integrated security=true;Persist Security Info=True";
conn = new SqlConnection(ConnStr);
Session["conn"]=conn;
conn.Open();
// 在新会话启动时运行的代码

}

void Session_End(object sender, EventArgs e)
{
//SqlConnection conn;
conn = (SqlConnection)Session["conn"];
//Session["conn"] = null;
conn.Close();
conn = null;
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。

}

</script>

搜索更多相关主题的帖子: session end quot 数据库 Import 
2007-06-03 19:38
铲铲
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:506
专家分:0
注 册:2006-5-2
收藏
得分:0 

不要指望Session_End会如期执行。当用户关闭浏览器时,一般不会引发Session_End,除非到达超时或者浏览器突然明确声明说不要Session了。

但是通常浏览器关闭时根本懒得给你发消息说我关闭了,丢掉会话,而是直接就不和你联系,就等待你服务器上超时自己超时去。这样做是有理由的:1关闭浏览器了还要占用带宽。2、既然要关闭浏览器,那应该尽快结束,不应该再发送信息,万一网络出问题,那岂不是卡住了,这回让用户感到恐慌,以为自己中了病毒。

所以一般是等服务器上事件到了,超时这样才会发生Session_End事件。


Session_End的发生有很大的不确定性。所以将宝贵的数据库连接放在Session_Start中打开,放在Session_End中关闭时非常不明智的!
还有一个原因是,假如在这期间服务器重新启动了,那么Session_Start中打开的连接,就永远也得不到Session_End中执行关闭,之前的Session_End不会发生了。所以这些连接不会关闭,占用了数据库连接。如果它们还是一个串行化的事物,那么这将导致其他连接根本无法访问被锁住的资源,永远……或者直到超时。

数据库的连接成本很高,包括占用各种资源,不应和一个会话的开始结束等同起来。应该在有需要的时候再去连接数据库,并且越短越好。在向数据库发起连接时,准备好所有的变量数据,不要再数据库打开的情况下再去询问用户。


铲铲是也
2007-06-05 00:28
快速回复:请教session_end()问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032968 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved