.net网站中的session在远程服务器失效的问题?急求,分不是问题,复制的别烦我了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net网站中的session在远程服务器失效的问题?急求,分不是问题,复制的别烦我了相关的知识,希望对你有一定的参考价值。

我的网站在本地登录正常,在远程服务器上,session就失效了,登录不上。每个页面都加了session判断,如果为null就会返回登录页面。

首页你要保证你确实创建了session,如果你确实创建了session,那么你要保证session是否过期。一般的情况下是session过期,你可以在web。config文件中设置session的过期时间。
找到<sessionState>节点,为其增加一个timeout的属性值,如timeout=600,单位为分钟,越大时间越长。
还有一种登录不上的情况是禁用了浏览器的cookie。或IE临时文件过多,清理删除即可。追问

首页获取的用户名为session,过期时间就算是1分钟,登录也够用了,不过一点击登录按钮就跳回登录页面。在本地运行一切正常。

追答

在本地运行过程中,你是vs里直接启动的还是把网站放在iis里运行的?这两者有区别。

追问

IIS中运行也正常,这个网站在局域网中运行一切都很正常,今天放到外网上,session就失效了,只能停在登录页面了

追答

如果你能保证不是你程序的问题,那么只有一点,那就是服务器上配置的问题。你用的是虚拟主机还是独立主机?

追问

虚拟主机

追答

如果是虚拟主机的话,那么根本就设置不了。你还是在web.config文件中配置下session的超时时间吧。或者换个浏览器试试看。如火狐,谷歌浏览器。

参考技术A 使用cookie+session验证,cookie保存登陆信息,每一次在验证session失效后,首先判断cookie中是否存在字段,如果没有,退出页面,如果有,就在后台登陆。前台感觉不到!这样即使服务器总是session失效,也不会动不动就跳回登陆界面!
===============================
password=md5(password)
session("bsz_login_name")=Request.Cookies("username")
session("bsz_login_password")=Request.Cookies("password")
自动给session重新赋值!追问

session失效了,只能停在登录页面,session都不存值的

追答

这么跟你说吧:登陆的时候保存两个值:一个session,一个cookie,在验证登陆状态的页面做如下验证:
if session="" then
if cookie="" then
[返回登陆界面]
else
session=cookie
end if
end if

参考技术B 服务器session被禁用了,叫服务器商开通一下
另外一种解决方法添加上cookies功能,不就的了,一般是可以解决问题的!!
要是连cookies功能也禁止使用,那就麻烦了
我的理解是session保存在服务器端,cookies是保存在客户端的,这两者没有什么关系。
如果两者都不行~~~那可真郁闷了追问

客服发截图了,session没被禁止啊

参考技术C
session 是网站分配给每个访问者小内存块
在PAGE1里写上:
if(在数据库里验证成功)

session["username"]=用户输入的用户名;//设置用户名的取值
response.redirect(page2.aspx);//切换到page2

else

return;

在page2里这样写
try

string a=session["username"].tostring();\\试图获得SESSION中的用户名值

catch(exception ecccc)

response.redirect(page1.aspx);\\如果没得到用户名值,那么返回前个网页,
//也就是登录框


追问

程序代码不会错的,现在问题是在远程服务器上的session根本就不存值

参考技术D 很简单,那个服务器上把session给禁了。。。追问

客服说服务器没问题

追答

禁用sessin是在发布网站的软件上做的,
比如iis,在iis中就可以把Active Server Pages (ASP) 会话状态关闭,
只要是这个属性为false, 你的一切session全都不能用,必须保证
此会话状态为true。。。

处理session跨服务器跨域失效问题

 

最近遇到一个需求,就是在单体架构的系统上要将系统中的文件资源分离到另一个资源系统中,这时候就需要考虑到跨域的问题了。网上解决方式有以下几种:

网上跨域的解决方案

Java中解决跨域的方式主要有两种:

1)第一种解决方法 后台代码在被请求的Servlet中添加Header设置response.setHeader("Access-Control-Allow-Origin", "*");

2)通过jsonp跨域请求的方式(具体什么是jsonp跨域百度上可以搜索到很多资料,这里就不过多解释)

但是java处理的跨域问题只是解决了前端可以正常调用跨域访问不同后台的接口的问题,但是session还是会因为跨域的问题而失效。所以我又找了一下网上解决保证跨域session不失效的解决方案:

1、基于NFS的Session共享

2、基于数据库的Session共享

3、基于Cookie的Session共享

4、基于MemcacheredisSession共享

我需要的只是在跨域的时候session不失效就ok了,但是这几种解决方式感觉代价太大,不太适合我们目前的小系统开发要求。于是我就想到先去了解cookiesession的执行流程

Cookie、session的交互原理

Cookie是保存在客户端,session是保存在服务器端的,具体的详细介绍百度有很多,这里就不用介绍了。首先我们需要处理cookie跨域的问题,保证都是共享一个cookieCookie跨域需要处理两个属性:

1、cookie.setDomain("www.baidu.com"); // 设置域名   

2、cookie.setPath("/search"); // 设置路径

一般我们需要把path设置为“/”代表根路径。Domain设置为同一一个一级域名,如:aaa.hshkj.com/bbb.hshkj.com,我们就可以设置 COOKIE 的域为 .hshkj.com,这样两个子域名就可以访问此COOKIE。这样各个服务器共享同一客户端 SESSION ID 的目的就达到了。一下是cookiesession交互的流程图:

 

 

 

 

理解的cookiesession的交互流程,我们就明白了session失效的原因,比如客户端访问A服务器的时候,生成的jsessionid的之为11111,但是当浏览器去调用B服务器的资源时,会携带这个jsessionid过去,发现B服务器上没有与之对应的session,这时B服务器又会生成一个新的session,并通过set-cookie方法把与该新的session对应的jsessionid(如222)设置到cookie中,这时候浏览器的jsessionid就变为了222,当浏览器再访问A服务器时,发现与222对应的没有session,这时候A服务器又会重新生成新的session

解决cookie、session跨域问题,如何解决session因跨域而失效的问题

知道了问题的所在,那我们可以提出解决的方案了(方法一是我提出的解决方案,方法二是网上提供的方案):

1、保证jsessionid在两个server的上都一致,这样就不会重新生成session

2、因为我用的是tomcat,所以我们可以让自己的tomcat使用各自的jsessionid

 

第一种的解决方案的样例代码

在资源服务器中添加一个filter类,在doFilter方法中执行

String jsessionId = CookieUtils.getCookieValue(httpRequest, "JSESSIONID");

//将session获取出来

HttpSession session = httpRequest.getSession();

//System.out.println("-----jsessionId------->>"+jsessionId);

CookieUtils.setCookie(httpRequest, response, "JSESSIONID", jsessionId);

 

第二种方法,tomcat\\conf\\context.xml,修改session的别名

<Context sessionCookieName="SHGJSESSIONID" sessionCooliePath="/">

这样在该tomcat下获取jsessionid别名就是SHGJSESSIONID对应的值

 

注意:方法一的时候要先获取session,然后再通过cookie修改JSESSIONID的值,这样才能保证JSESSIONID的值没有变。因为如果获取session 的放在我们定义的cookie后面的话,系统在自动生成session时,调用setcookie方法就会在我们的setcookie的后面,这样就达不到我们想要设计的效果了。

 

总结:其实很多时候,我们要解决问题时,我们都是需要先了解原理,然后再大胆的猜测解决方案,大胆的去尝试,你就会收到意想不到的效果

 

 

 

以上是关于.net网站中的session在远程服务器失效的问题?急求,分不是问题,复制的别烦我了的主要内容,如果未能解决你的问题,请参考以下文章

如何解决iframe session 失效问题

Asp.Net MVC Ajax轮训解决Session失效时间

IIS6里面session老是失效需要打哪个补丁?

关于云主机Thinkphp框架Session跨页失效的问题

在 ASP.NET 中的 Session.Clear() 和 Session.Abandon() 之后会话变量未清除

2.HttpSessionListener接口来实现网站在线人数的统计