首页 新闻 搜索 专区 学院

ASP.NET 中 Application 与 Session 的区别

0
悬赏园豆:30 [已解决问题] 解决于 2015-09-29 15:18

情景: 多台服务器, 不特别配置,Session只会在某一个服务器上,导致用户打开页面的时候,如果用的另一个服务器,会让重新登录.

问题一: 那 Application 是每个服务器上一个呢 ,还是几个服务器共享一个?

问题二: 配置session共享或者强制用户只登陆某个服务器,都会有弊端,有没有别的替代方法?

孤独的守候者的主页 孤独的守候者 | 初学一级 | 园豆:48
提问于:2015-09-24 18:27
< >
分享
最佳答案
0

1、Application是一个应用程序一个,和服务器无关哈。

2、修改Session的存储模式,默认是InProc,可以修改为数据库存储,这个时候可以用Redis,Memcached,Sql Server来存储用户的Session。分布式上一般都是这种用法。

收获园豆:20
幻天芒 | 高人七级 |园豆:36652 | 2015-09-25 09:25

额。我是说在 Application_Start 事件中可以这样写:

 Application["PageSize"] = 18

 Application["VisitCount"] = 0

就是存放一些全局通用的值 或者记录访问次数的内容。

在需要用到的时候就可以直接使用了。

其实常量倒无所谓了。就是说 Application["VisitCount"] 他在每次页面加载的时候都会加一,所以我的疑问是如果网站部署在很多服务器上,这个次数是累加的还是每个服务器上维持着一个 Application["VisitCount"]。

我也知道这种用法现在不常用了,只是感到疑惑而已,求解答

孤独的守候者 | 园豆:48 (初学一级) | 2015-09-25 11:34

@最爱左手: 每个应用程序维护一个。因为一台服务器可以部署多个应用程序。

幻天芒 | 园豆:36652 (高人七级) | 2015-09-25 12:24

@幻天芒: 那就是说在分布式服务器中部署该网站,用  Application["VisitCount"] 取不到总的访问数目了?

孤独的守候者 | 园豆:48 (初学一级) | 2015-09-25 13:54

@最爱左手: 是的,只能获取到访问单个应用的用户总数。

幻天芒 | 园豆:36652 (高人七级) | 2015-09-25 20:35
其他回答(2)
0

Application :顾名思义 是应用程序的意思,一个进程就是一个application

Session:是用户状态信息

 

一般来说如果用Cookie作为登录的SessionKey,同一个域名下肯定不会有共享问题啊。

想不通你是怎么识别用户的 不用Cookie的时候?

收获园豆:5
笋干 | 园豆:76 (初学一级) | 2015-09-24 19:22

如果用 session的话,服务器会生成一个 SessionID 保存到客户端,当用户打开其他页面的时候,会将本地Cookie 中的 SessionID 发送到服务器匹配。如果匹配到则不用重新登录。

 

现在的问题是,如果有多台服务器,当你登录时,Session只会保存在某一个服务器上,如果你打开其他页面的时候登录的是其他的服务器的话,会找不到Seesion,让你重新登录。

 

不过经过配置,可以实现Session 共享 或者 让当前用户强制登录某一个服务器,这样就解决了重新登录的问题,但是也会额外付出一些性能消耗。所以问有没有可以替代 Seesion的方法。

支持(0) 反对(0) 孤独的守候者 | 园豆:48 (初学一级) | 2015-09-25 09:26

@最爱左手: 哈, sorry,我想错了。

 

问题其实归根结底就是Session如何共享的问题。不经过配置是不行的。下边幻天芒的解答是对的,建议走缓存 redis/mem 不然性能不高

支持(0) 反对(0) 笋干 | 园豆:76 (初学一级) | 2015-09-25 09:29
0

1. 可以用进程外session来实现, 

2. 用memcached来做session这一块

收获园豆:5
秋壶冰月 | 园豆:5663 (大侠五级) | 2015-09-24 20:14

1 Memcahed 与 Redis 哪个更好呢?

2 另外就是上面的第一个问题,Application 在多台服务器的情况下是跟 Seesion一样么,每台服务器存一个Application?

支持(0) 反对(0) 孤独的守候者 | 园豆:48 (初学一级) | 2015-09-25 09:42

@最爱左手: 缓存我感觉memcache好一些,这样可以避免数据量大的时候,session失效的问题

支持(0) 反对(0) 秋壶冰月 | 园豆:5663 (大侠五级) | 2015-09-25 16:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册