网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

在ASP与ASP.NET之间共享对话状态(1)

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/13
sion = new mySession();
  CreateNewSessionCookie();
  IsNewSession = true;
  }
  else
  Session = sessionPersistence.LoadSession(
  Server.UrlDecode(cookie.Value).ToLower().Trim(),
  dsn,
  SessionExpiration
  );
  
  this.Unload += new EventHandler(this.PersistSession);
  }
  private void CreateNewSessionCookie()
  {
  cookie = new HttpCookie(sessionPersistence.SessionID,
  sessionPersistence.GenerateKey());
  this.Response.Cookies.Add(cookie);
  }
  
  SessionPersistence类使用微软.NET框架组件的BinaryFormatter来串行化和并行化对话状态为二进制格式以提供最佳性能。结果的二进制对话数据接着作为图象字段类型被存入SQL Server。
  
  public mySession LoadSession(string key, string dsn,
  int SessionExpiration)
  {
  SqlConnection conn = new SqlConnection(dsn);
  SqlCommand LoadCmd = new SqlCommand();
  LoadCmd.CommandText = command;
  LoadCmd.Connection = conn;
  SqlDataReader reader = null;
  mySession Session = null;
  
  try
  {
  LoadCmd.Parameters.Add("@ID", new Guid(key));
  conn.Open();
  reader = LoadCmd.ExecuteReader();
  if (reader.Read())
  {
  DateTime LastAccessed =reader.GetDateTime(1).AddMinutes(SessionExpiration);
  if (LastAccessed >= DateTime.Now)
  Session = Deserialize((Byte)reader["Data"]);
  }
  }
  finally
  {
  if (reader != null)
  reader.Close();
  if (conn != null)
  conn.Close();
  }
  
  return Session;
  }
  private mySession Deserialize(Byte state)
  {
  if (state == null) return null;
  
  mySession Session = null;
  Stream stream = null;
  
  try
  {
  stream = new MemoryStream();
  stream.Write(state, 0, state.Length);
  stream.Position = 0;
  IFormatter formatter = new BinaryFormatter();
  Session = (mySession)formatter.Deserialize(stream);
  }
  finally
  {
  if (stream != null)
  stream.Close();
  }
  return Session;
  }
  
  在请求的末尾,Page类的Unload事件被启动了,一个同Unload事件一起注册的事件处理方法将串行化对话数据为二进制格式并将结果二进制数据存入SQL Server。
  
  private void PersistSession(Object obj, System.EventArgs arg)
  { sessionPersistence.SaveSession(
  Server.UrlDecode(cookie.Value).ToLower().Trim(), dsn, Session, IsNewSession);
  }
  public void SaveSession(string key, string dsn,
  mySession Session, bool IsNewSession)
  {
  SqlConnection conn = new SqlConnection(dsn);
  SqlCommand SaveCmd = new SqlCommand();
  SaveCmd.Connection = conn;
  
  try
  {
  if (IsNewSession)
  SaveCmd.CommandText = InsertStatement;
  else
  SaveCmd.CommandText = UpdateStatement;
  
  SaveCmd.Parameters.Add("@ID", new Guid(key));
  SaveCmd.Parameters.Add("@Data", Serialize(Session));
  SaveCmd.Parameters.Add("@LastAccessed", DateTime.Now.ToString());
  
  conn.Open();
  SaveCmd.ExecuteNonQuery();
  }
  finally
  {
  if (conn != null)
  conn.Close();
  }
  }
  private Byte Serialize(mySession Session)
  {
  if (Session == null) return null;
  
  Stream stream = null;
  Byte state = null;
  
  try
  {
  IForma

网学推荐

免费论文

原创论文

设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号