// 在 global.asax 中添加代码:<%@ Import namespace="DataAccess" %><script language="c#" runat="server">
// Import 输入了自己在bin目录下的类库,该类中可以有一个全局的对象 Manager
// 它管理当前所有的会话,可以利用 Session.SessionID 作为 Hashtable 的 key 实现,
// 其中 Hashtable 中储存了会话,或者其它任何自己需要的“会话级”全局对象void Application_Start()
{
// 初始化,比如
Manager.OnAppStart();
}
void Application_End()
{
Manager.OpAppEnd();
}
void Session_Start()
{
// 将建立新对象,并把 id 作为 key , 对象作为 object 添加到 hashtable 中
Manager.OnSessionStart(Session.SessionID);
}
void Session_End()
{
// 关闭连接
Manager.OnSessionEnd(Session.SessionID);
}
</script>为了使用这个连接,可以简单的实现为:
SqlConnection conn = null;void Page_Load(Object o, EventArgs e)
{
conn = Manager.GetConnection(Session.SessionID);
if(conn == null) error("非法的连接");
}
//我实现过类似的方法,,不过,,我接触 asp 才一个多月,该方法可能有很多弊端,另外,在会话级保存整个连接,,,会不会花费太大了?
// Import 输入了自己在bin目录下的类库,该类中可以有一个全局的对象 Manager
// 它管理当前所有的会话,可以利用 Session.SessionID 作为 Hashtable 的 key 实现,
// 其中 Hashtable 中储存了会话,或者其它任何自己需要的“会话级”全局对象void Application_Start()
{
// 初始化,比如
Manager.OnAppStart();
}
void Application_End()
{
Manager.OpAppEnd();
}
void Session_Start()
{
// 将建立新对象,并把 id 作为 key , 对象作为 object 添加到 hashtable 中
Manager.OnSessionStart(Session.SessionID);
}
void Session_End()
{
// 关闭连接
Manager.OnSessionEnd(Session.SessionID);
}
</script>为了使用这个连接,可以简单的实现为:
SqlConnection conn = null;void Page_Load(Object o, EventArgs e)
{
conn = Manager.GetConnection(Session.SessionID);
if(conn == null) error("非法的连接");
}
//我实现过类似的方法,,不过,,我接触 asp 才一个多月,该方法可能有很多弊端,另外,在会话级保存整个连接,,,会不会花费太大了?
解决方案 »
- 点击button为什么会打开一个新的窗口?如何解决?
- httpmodule的详细文档
- 在vs2005中设置表格,表格中的内容不能居中对齐
- 怎么判断 sessionid为123456 的客户端是否存在
- 小型投票系统
- 怎样安装WEB组件?
- 关于关闭模态窗口后更新父页面问题,急!!!!在线等!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 请问:用DataAdapter.fill()填充DataSet对象时,如果DataAdapter相关的SQL语句返回空值怎么办?急.....
- 使用httphandler来防止盗链
- 请问为什么同一个工程(vs管理的)在我本机显示面页显示正常。但是另一台机子却字体显示得特大
- 如果listbox中有几个listitem的VALUE是相同的,就只能选中序号最小的那个吗?
- 求助HtmlInputFile控件不能上传:(在线等:)
{
public class Mamager
{
Hashtable ht = null; static public void OnAppStart(){
ht = new Hashtable();
} static public void OnAppEnd(){
//ht.Clear();
} // 在整个会话开始时打开连接
static public void OnSessionStart(String key)
SqlConnection conn = new SqlConnection(GlobalSetting.ConnStr);
conn.Open(); ht.Add(key, conn);
}
// 任何时候,你都可以得到这个连接,只要会话是有效的
static public SqlConnection GetConnection(String key)
SqlConnection conn = (SqlConnection)ht[key];
return conn;
} // 然后,在会话结束的时候,关闭连接
static public void OnSessionEnd(String key)
SqlConnection conn = (SqlConnection)ht[key];
if(conn != null) conn.Close();
}
// 当请求很频繁时,不一定没个会话都是“有效”的,只有经过“认证”后的会话才建立连接,进行审计,可以简单的对 Manager 修改:
static public void SetupConnection(String key)
SqlConnection conn = new SqlConnection(GlobalSetting.ConnStr);
conn.Open();
ht.Add(key, conn);
}
static public void OnSessionStart(String key)
// return; 修改后,不是每次都建立连接
}
// 然后,在我们的 login.aspx 中,
void btn_Submit(...)
{
if(Login(name, pwd) == true){
Manager.SetupConnection(Session.SessionID);
}
}
直接SqlConnection=Session["my_connection"]就可以了,再不用PROVIDER和my_connection.open之类的语句了,是这样吗?我也知道这样做不好
但是老板要求的
我也没办法
还是多谢各位大哥