莫言科技

全过程、自定制,轻松实现跨 旅游集散中心自助游

票务与调度系统(独立版) 整合旅游集散中心资源,提供 自助半自助游自定义套餐

面向有志创业的人士、基于云 计算理念提供的创业产品

敬请期待

查看: 2855|回复: 3

[转]session持久化-凯发k8官网下载客户端

[复制链接]
发表于 2011-3-4 16:59:41 | 显示全部楼层 |
本帖最后由 star 于 2011-3-4 17:10 编辑
% k  v8 u0 c/ ~% a* \1 l6 { ]5 e
关于session持久化这方面的话题,有很多人已经写过了,但是,毕竟这是我的项目经验,更加真实,可用。, s1 i0 m v( }# |4 w2 _- g
    进入主题。* t! ^/ g. k3 x1 z, y) y3 e

  ?. l" l- c* s: r9 i* n4 [情景一,session id在客户端的状态
4 h% i" [& _) ]4 r1 |        情景一中,saved in cookies情况& a. e4 u: x" j/ u
        id保存在client端的cookies集合中7 }5 }$ k1 _: v
        缺点是,如果client端的cookie被禁用,那么id无法保存) j( l  g7 u3 q, d
        设置cookieless="false"
2 v( w, w3 v6 f: d4 {$ y/ v
$ b0 i# _2 `# w4 h l6 c ( \" a$ k/ j$ v8 b9 emode="inproc"6 u  [$ e. r5 m2 d9 n
stateconnectionstring="tcpip=127.0.0.1:42424") \: q* l  k% g9 k" z3 s7 _1 u4 z
sqlconnectionstring="datasource=127.0.0.1;userid=sa;password="
9 w, {( c/ p1 b* [! b- ccookieless="false"
" s) }  j5 i9 m; a/ btimeout="20"/>/ l  f# y- y4 i) _9 i
! y% j. b" o( o- c9 e( ~
        情景一中,saved in url情况
8 y- z$ y( v* ?$ g* [, y) [4 ^        ms为了解决cookie被禁时,也能正常保存id,在.net2.0中可以把id保存在url中.
5 _- l- j, }: t3 ]; @* o  c        设置cookieless="true"3 c/ {' g* a. ~5 f
, ?8 m) n a! a
4 l( {4 t( t, q. @: h2 f$ g: o& `
    mode="inproc"
4 a$ `" \& e3 q/ q9 ~    stateconnectionstring="tcpip=127.0.0.1:42424"
) u7 `4 p4 l2 d8 c/ n5 y    sqlconnectionstring="datasource=127.0.0.1;userid=sa;password="
2 g" u9 b' a; z  _3 j z: r    cookieless="true"
4 h: l) z1 p8 a# h( a- v* m    timeout="20"/>! _8 n4 `# v# g0 }6 o3 [& |0 @9 k# x
6 i! \/ i6 @6 x" r a& b
       情景二,session状态在服务器中的三中模式,进程内、进程外、数据库。
* q: c0 l$ ~- j6 b( g; a6 m            情景二中,saved in 进程内" o) g3 ]: a  ~$ p8 y- h/ q% n* u
            设置mode="inproc"
# o4 e. w1 k5 d2 d) [' ?            优点;保存在本机内存中,无需跨网络,访问内存速度快
* i! c! q# e2 t$ k            缺点;如果iis进程发生异常或者website有文件变更,都被asp.netruntime监视,然后重新设置session状态
8 t# b5 m: p) h) e1 r
0 l$ t3 q6 c) t% `       5 o2 l. a1 {( q p" y9 i
            mode="inproc"6 i. i$ x' p/ a& c& h! v6 w
          stateconnectionstring="tcpip=127.0.0.1:42424"
; ]/ {* [- n1 g! e            sqlconnectionstring="datasource=127.0.0.1;userid=sa;password="
1 c5 k* a' h8 o  t- k; u            cookieless="false"  r8 k& z5 v2 k* a( b, d- t! n
            timeout="20"/>
. p& u  e7 a" f8 k  ~7 m; v1 i; y1 l/ }- `7 z2 p: n7 m1 m, l  a0 m
           情景二中,saved in 进程外
$ e  q# w- ?- i0 g; |! [4 \8 s" @           设置mode="stateserver",启动asp.net状态服务 b4 o3 w$ m  n. g9 b4 y
           定位注册表  {' i5 v# ?, o/ a3 y
            “hkey_local_machine/system/controlsett001/services/aspnet_state/parameters“修改allowremoteconnection=1,port=424248 z0 f/ r) \1 g" m: g
           注意这些参数都是十进制类型,且这些设置是在访问远程asp.net状态服务的必要设置。" m4 a* a, a! _  w( w
           优点;稳定,即使关闭www服务,只要启动asp.net状态服务,session状态依然存在,不信你试试。
6 l' q2 @  j7 v* |4 y           如果把状态保存在非本机上只需修改上面的注册表,修改stateconnectionstring="tcpip=remoteip:remoteport",
2 l$ {* t: v" k) [           如果状态保存在远程机上的asp.net状态服务中,那么当页面关闭的时候,session状态马上失效,
/ t" a; e3 p/ n4 ?( u# k* d& k3 ]  v7 {           不管你的状态保存时间设置时间有多长,一律失效,
. @. k8 z  f* f% }/ ?" ~           不信可以考试试,^-^。
/ p# ~( `* c0 n; h/ k
& ?- v7 x8 h; }" v* l. r    - m* s5 z6 ^! b5 y4 j        mode="stateserver"
  q$ _" u9 x( w/ j# x8 `4 x0 u, w        stateconnectionstring="tcpip=127.0.0.1:42424"
' [5 {, o6 \% q( {: a        sqlconnectionstring="datasource=127.0.0.1;userid=sa;password="
. y8 a3 h5 a8 f* e: e3 d9 `        cookieless="false"
* x n; u& m2 r8 j2 e- f& g        timeout="20"/>
' v. `) |3 f7 s1 h. q* _
9 [& f) y, q8 ?       情景二中,saved in 数据库* z' q6 [% l) v3 `- x% q* a# c
       设置
6 ^1 z8 g: l. u. h4 z, i& a       mode="sqlserver"。
! a, y: m! s& x2 y! {       sqlconnectionstring="datasource=127.0.0.1;userid=sa;password="。* z, u6 `9 z' ?3 o2 g3 j
       启动sqlserver和sqlserveragent。6 s }- o# w6 q
       定位到[systemdrive]\winnt\microsoft.net\framework\[version]\。8 b- r$ z- q/ a) o; t
       执行installsqlstate.sql。& d6 v6 h k0 ~/ x  k
       然后我们看tempdb数据库中多了两个用户表,而且多了一个aspstate的空库,aspstatetempapplications和aspstatetempapplications表中
. v& u. v  o3 r3 m# \" @       存储的是应用程序信息,每个应用程序在启动的时候在这里会注册一条记录,包括应用程序的id(通过哈希算法生成的)和应用程序名称,/ ~. m6 f- ~3 c  a; {. u
       实际上session信息是存储在了tempdb数据库的aspstatetempsessions表中,另外查看管理->sqlserver代理->作业,# y3 i# s4 l/ i
       发现也多了一个叫做aspstate_job_deleteexpiredsessions的作业,这个作业实际上就是每分钟去aspstatetempsessions表中删除过期的session信息。2 ~- r# u0 l8 x/ [ `
- i4 c6 s7 a' d! h5 s; h9 @) e8 t
新建一个asp.netwebsite,按f5,一切ok。
; d4 y  x' m& ~8 x' i效果图形
3 t4 a5 o; m9 t( s2 w0 ~两张表  p0 y" v; k2 w8 k. d2 k( g3 c

: `' ~5 ~5 t' o# v. p7 _& k" raspstatetempapplications表的数据
" ]1 r) w; `9 e2 k x0 @
' h q5 u2 k( i: m' ~* r6 oaspstatetempsessions表的数据* q* |# e2 b" k, m7 a0 v

& r4 h1 q- z. oaspstate_job_deleteexpiredsessions作业1 j; b ?8 y6 |$ n
n/ r  d0 p9 l0 d

% l! j% i% g. { f0 e* ]; `需要注意的地方;
  q, m0 t' k! f% p  f9 p1 p. ^6 f7 m) t
一,aspstatetempapplications和aspstatetempsessions表的权限用户是sa,既管理员。
2 w" r& r: t; j! z, v! u二,启动mssqlseveragent,用来执行清除过期session的作业aspstate_job_deleteexpiredsessions。/ h* z; h) d$ |  u  t
三,如果mssqlserver与website不在同一台机器上,那么设置sqlconnectionstring="datasource=remoteip;userid=username;password=userpwd"
1 n7 g% a. j* p* [2 d8 l, l6 a) k) l8 h8 r9 c
结束
3 l, q# o- p g4 ^8 x z6 g    写得不妥之处,请多多指教!

本帖子中包含更多资源

您需要 才可以下载或查看,没有帐号?

x
 楼主| 发表于 2011-3-4 17:10:52 | 显示全部楼层
eb_exp中直接用的是
& m5 v6 q q4 n" l9 r

||archiver|莫言科技 ( )   

gmt 8, 2020-9-5 20:11 , processed in 0.063479 second(s), 10 queries , wincache on.

powered by x3.2

© 2001-2013

返回列表