ASP.NET二级域名站点共享Session状态
2010-01-15 10:44
我的前面一篇文章提到了如何在使用了ASP.NET form authentication的二级站点之间共享登陆状态,
http://www.cnblogs.com/jzywh/archive/2007/09/23/902905.html,
今天, 我要写的是如何在二级域名站点之间,主站点和二级域名站点之间共享Session。
首先, Session要共享,站点之间SessionID必须要一致,那怎么保证SessionID一致呢?
ASP.NET
中的SessionID是存储在客户端的cookie之中键值为ASP.NET_SessionId用来维护浏览者Session对应关系的一个字符串,
要想在二级域名站点之间,主站点和二级域名站点共享SessionID就必须先共享,那么我们就必须先实现ASP.NET_SessionId这一
cookie的共享。
CrossDomainCookieModule
------------------------------------------------------------------------------------------------
public class CrossDomainCookie : IHttpModule
{
private string m_RootDomain = string.Empty;
#region IHttpModule Members
public void Dispose()
{
}
public void Init(HttpApplication context)
{
......
在Asp.net中Session的存储方式不象asp那样单一,一共提供了三种存储方式,由于最近一个2000多人使用的web软件出现了故障,用户每
天早上在某一时刻出现难以登陆现象,接着Session丢值出现,只有重启IIS,或机器.这时程序恢复正常了.整天都不会出现同样的问题
,但是第二天依旧!这种现象持续了好几天,我检查了一下日志文件,高峰每秒访问人数大概20人左右,同时大概100多人在线,以后访问人数还会增加,为了
解决这个怪问题,先从软件着手,故而三种方式都应用了一番。
打开web.config文件
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20" ......
asp中Session的工作原理:
asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。
asp.net Session的实现
asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了。
原因1:
bin目录中的文件被改写,asp.net有一种机制,为了保证dll重新编译之后,系统正常运行,它会重新启动一次网站进程,这时就会导致Session丢失,所以如果有access数据库位于bin目录,或者有其他文件被系统改写,就会导致Session丢失
原因2:
文件夹选项中,如果没有打开“在单独的进程中打开文件夹窗口”,一旦新建一个窗口,系统可能认为是新的Session会话,而无法访问原来的Session,所以需要打开该选项,否则会导致Session丢失
原因3:
似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开
原因4:
Session的时间设置是不是有问题,会不会因为超时造成丢失
原因5:
IE中的co ......
test.xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
<R SecuCode="601600" Glossary="学IT网测试获取XML结果显示正常,。。。。。。。哈哈" />
<R SecuCode="600056" Glossary="测试第二个,。。。。。。。哈哈" />
</root>
下面xml解析操作类(扩展的):
/// <summary>
///
/// author:dodo
/// 网址:www.xueit.com
///
/// 读取XML类
/// </summary>
/// <typeparam name="T"></typeparam>
public class xmlHepler<T>
{
Hashtable table = new Hashtable();
T FileName;
T Root; //根节点
T RootAttName; //节点属性名称
  ......
test.xml
<?xml version="1.0" encoding="utf-8" ?>
<root>
<R SecuCode="601600" Glossary="学IT网测试获取XML结果显示正常,。。。。。。。哈哈" />
<R SecuCode="600056" Glossary="测试第二个,。。。。。。。哈哈" />
</root>
下面xml解析操作类(扩展的):
/// <summary>
///
/// author:dodo
/// 网址:www.xueit.com
///
/// 读取XML类
/// </summary>
/// <typeparam name="T"></typeparam>
public class xmlHepler<T>
{
Hashtable table = new Hashtable();
T FileName;
T Root; //根节点
T RootAttName; //节点属性名称
  ......
Repeater在前台使用比较灵活自由,但有一个问题就是Repeater不支持直接分页,这个很多人看起来就有点不想用了,但我想大家都知道GridView控件或DataGrid控件在启用自带分页的时候其实效率是非常低的,大的不说,一但到了百万级数据以后,就会感觉是多么的痛苦和无耐了,所以即使是用DataGrid(GridView)控件,高手们还是只会只使用一个界面而已,而分页肯定都是自己写的,这样一比较利弊就出来了,既然这样那就选择Repeater吧,本篇示例演示使用纯sql语句的双top分页法达到控件分页的功能.
--------------------------------------------------------------------------------
前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<!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" ......
Repeater在前台使用比较灵活自由,但有一个问题就是Repeater不支持直接分页,这个很多人看起来就有点不想用了,但我想大家都知道GridView控件或DataGrid控件在启用自带分页的时候其实效率是非常低的,大的不说,一但到了百万级数据以后,就会感觉是多么的痛苦和无耐了,所以即使是用DataGrid(GridView)控件,高手们还是只会只使用一个界面而已,而分页肯定都是自己写的,这样一比较利弊就出来了,既然这样那就选择Repeater吧,本篇示例演示使用纯sql语句的双top分页法达到控件分页的功能.
--------------------------------------------------------------------------------
前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<!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" ......
以下经验总结自,并且经过验证
1,不参与POSTBACK机制的控件,不要用服务器控件,尽量用静态HTML标记
2,编译时使用RELEASE配置
3,正式投入应用时,记着将DEBUG设为FALSE
4,SMARTNAVIGATE记着设为TRUE,它可以让浏览者感觉到你性能的提高
5,如果不是必须保持更新的页面,请记住加入声明,它可以大幅提高性能
6,除了需要分页的那些记录以及那些必须实时保持更新的记录外,其他的来源于数据库的条目,请记住使用CACHE对象将其缓存
7,关闭那些不需要VIEWSTATE的控件的VIEWSTATE属性
8,关闭那些不需要使用SESSION的页面的ENABLESESSION属性
9,如果需要大规模从数据库中获取数据,请将零散的数据获取任务集结成批,就是说,尽量用最少次数的数据库连接来获取你想要的数据,尽量把可以合并的任务用存储过程合并
10,尽量使用存储过程而不是SQL语句
www.baidulai.com www.158689.com www.sendwin.cn www.stockdatas.cn www.stockbests.cn www.stocknewss.cn www.yzjaa.cn www.xackrs.cn www.lygrh.cn www.jusem.cn www.0213344.com www.027flzx.com www.315668.com ......