asp.net通过sessionid cookie获取session信息

  如何设置asp.net sessionid获取用户session信息,如使用了uploadify,swfupload等居于flash上传的控件,非ie浏览器flash不会传递sessionid的cookie值到服务器,会导致无法获取当前用户的session值,从而无法将图片和当前用户关联起来。

  解决办法就是通过get/post传递当前用户的SessionId到服务器(sessionid值也存储在cookie中,名称为ASP.NET_SessionId,但是这个cookie是httponly的,js无法读取==》HostOnly Cookie和HttpOnly Cookie),所以需要用服务器端代码来复制给客户端。

  php可以通过session_id来重置sessionid

	if (isset($_POST["PHPSESSID"])) {
		session_id($_POST["PHPSESSID"]);
	} else if (isset($_GET["PHPSESSID"])) {
		session_id($_GET["PHPSESSID"]);
	}

  asp.net需要在Global.asax中的 Application_BeginRequest中获取get/post提交的sessionid值,然后生成ASP.NET_SessionId这个cookie来实现。


    void Application_BeginRequest(object sender, EventArgs e)
    {
        string session_param_name = "ASPSESSID";//get/post提交的sessionid键名称,如果键名称不是这个自己修改变量值
        string session_cookie_name = "ASP.NET_SessionId";//asp.net生成的记录cookie值的名称,这个不要修改
        string SessionIDValue = Request.Form[session_param_name];
        if (!string.IsNullOrEmpty(SessionIDValue))//传递了SessionId值则重置Session对应的cookie值
            try
            {
                UpdateCookie(session_cookie_name,SessionIDValue);
            }
            catch (Exception)
            {
                Response.StatusCode = 500;
                Response.Write("Error Initializing Session");
                Response.End();
            }
    }
    void UpdateCookie(string cookie_name, string cookie_value)
    {
        HttpCookie cookie = Request.Cookies.Get(cookie_name);
        if (cookie == null)
        {
            cookie = new HttpCookie(cookie_name);
            cookie.Value = cookie_value;
            Request.Cookies.Set(cookie);
        }
    }

  然后swfupload或者upload设置附加表单提交值,附带上SessionID

swfupload

<script>
var settings = {
    flash_url: "swfupload/swfupload.swf",
    upload_url: "/upload.ashx",
    post_params: {"ASPSESSID" : "<%=Session.SessionID %>""},//注意这里用了服务器端标签,所以这个代码一定要放在aspx之类的动态页里面,不能单独放js文件里面
//...其他配置
</script>

uploadify

<script>
var settings = {
    swf: "uploadify.swf",
    uploader: "/upload.ashx",
    formData: {"ASPSESSID" : "<%=Session.SessionID %>""},//注意这里用了服务器端标签,所以这个代码一定要放在aspx之类的动态页里面,不能单独放js文件里面
//...其他配置
</script>

相关文章

asp.net/asp uploadify示例下载

SWFUpload中文使用说明文档
 


原创文章,转载请注明出处:asp.net通过sessionid cookie获取session信息

评论(0)Web开发网
阅读(453)喜欢(0)Asp.Net/C#