session线程问题

在论坛上查问题时候偶然看到一个线程session的问题...感觉很不错..记下来,以后碰到可以处理

转载的论坛地址:http://bbs.csdn.net/topics/320036394


之前遇到一个问题。
于是做了以下实验:
页面加载后,提交一个Ajax请求(暂称为ajax1),请求的线程在服务器上被睡眠10秒钟。
点击页面上一个button,触发另一个Ajax请求(ajax2)。

当没有使用session,在服务器未处理完ajax1的请求时,服务器依然可以处理ajax2的请求。
但是,当使用了session,在服务器未处理完ajax1的请求时,服务器不能处理ajax2的请求。必须等到ajax1处理完成后,才能处理ajax2的请求。

使用session的代码很简单,Session.Add("user", "aaa");

求教牛人,如何在使用了session后,当ajax1未处理完成时,依然可以处理ajax2的请求?                              <div class="social-share">
代码:
<code class="csharp keyword"></code></div>

代码:

protected void Page_Load(object sender, EventArgs e)
        {
            //使用session的代码
            Session.Add("user", "aaa");
            switch (Request.QueryString["action"])
            {
                case "ajax1":
                    Thread.Sleep(8000);
                    Response.Clear();
                    Response.Write("alert('ajax1');");
                    Response.End();
                    break;
                case "ajax2":
                    Response.Clear();
                    Response.Write("alert('ajax2');");
                    Response.End();
                    break;
            }
        }

function myXmlHttp(){}
 
myXmlHttp.prototype.sendXmlHttp=
    function(url,data,fun){
        var xmlHttp;
 
        if (window.ActiveXObject) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        else if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }
 
        xmlHttp.open("POST", url, true);
 
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
 
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4) {
                if (xmlHttp.status == 200) {
                    if (xmlHttp.responsetext != "") {
                        if(fun !=""&&fun !=undefined)
                        {
                            fun(xmlHttp.responsetext);
                        }
                    }
                }
            }
        };
        xmlHttp.send(data);
 
    }



<pre name="code" class="html">Session实现了Reader/Writer的锁机制:

  当页面对Session具有可写功能(即页面有<%@ Page EnableSessionState="True" %>标记),此时直到请求完成该页面的Session持有一个写锁定。

  当页面对Session具有只读功能(即页面有<%@ Page EnableSessionState="ReadOnly" %>标记),此时知道请求完成该页面的Session持有一个读锁定。

  读锁定将阻塞一个写锁定;读锁定不会阻塞读锁定;写锁定将阻塞所有的读写锁定。这就是为什么ajax1,ajax2都去写同一个Session时,ajax2要等待ajax1完成后,才开始写。


加一个EnableSessionState="ReadOnly" 搞定

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值