为什么Asp.Net发布到Linux下会造成session丢失呢?

在工作中,我需要将用VS2010开发Asp.Net项目发布到Linux下,Asp.Net是.Framework 4.0.0,Linux是mono 3.10.0+jexus 5.6.3;

当我发布到IIS下,一切正常;

但是,当我发布到Linux下,就出问题了,可以登录进入系统,当你再对其他页面进行操作时,又会重新跳转到登录页面,这是为什么呢?

我在每个页面都加了权限,如果session不存在,就表示没有登录,就会自动跳转到登录页面,想了一下可能是session丢失了。

在Asp.Net中,如果你不在Web.config手动设置SessionState节点,默认就是InProc,就是所谓的进程内session,session是存在

Web服务器的进程中,我没有设置SessionState节点,默认就是InProc,看了jexus的config,发现httpd.processes=8,问题就是在这里了;

只要把改成httpd.processes=1就一切正常了,如果你觉得进程内session不够用,容易崩溃,可以在Web.config中添加SessionState节点,

将mode设置为StateServer或者SQLServer,具体怎么设置不说了,网上有很详细的资料。

在最后还要补充一点,如果将mode设置为StateServer或者SQLServer,自定义类需要添加序列化的特性,AspNet会序列化对象,不允许有

非序列化对象,否则会报错;如果将mode设置为InProc,则不用为自定义类添加序列化的特性。

posted @ 2015-04-21 15:49  阿斌分享  阅读(302)  评论(0)    收藏  举报