如何设置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
var settings = {
flash_url: "swfupload/swfupload.swf",
upload_url: "/upload.ashx",
post_params: {"ASPSESSID" : """},//注意这里用了服务器端标签,所以这个代码一定要放在aspx之类的动态页里面,不能单独放js文件里面
//...其他配置
uploadify
var settings = {
swf: "uploadify.swf",
uploader: "/upload.ashx",
formData: {"ASPSESSID" : """},//注意这里用了服务器端标签,所以这个代码一定要放在aspx之类的动态页里面,不能单独放js文件里面
//...其他配置
相关文章
加支付宝好友偷能量挖...
2017-8-4Web开发网
阅读(1035)喜欢(0)