FormsAuthenticationTicket的UserData取不到的问题

在使用FormsAuthenticationTicket的userData字段存储序列化后的用户身份对象时,遇到重定向后userData为空的问题。分析发现,序列化字符串以UNICODE编码且首个字符为NUL,导致赋值时取到空值。解决方案是在加密前使用HttpUtility.UrlEncodeUnicode进行编码,在解密后使用HttpUtility.UrlDecode还原数据。
摘要由CSDN通过智能技术生成

使用场景:

在FormsAuthenticationTicket的userData字段中存放用户身份对象(以BinaryFormatter进行序列化)


出现的问题:

通过写COOKIE将加密后的FormsAuthenticationTicket保存到用户浏览器,重定向后的请求中无法从COOKIE取得FormsAuthenticationTicket的userData字段,该字段为空。


CSDN有一篇类似的贴子如下,发现其分析还是没有找到根本原因。

http://bbs.csdn.net/topics/330186399


分析发现userData字段如存放的是普通的非序列化后的字条串,userData字段在重定向后能拿到;所以问题应该在创建FormsAuthenticationTicket对象的时候,userData的赋值不成功。


IFormatter fm = new BinaryFormatter();
            Stream sm = new MemoryStream();
            fm.Serialize(sm, ssoIdentity);
            sm.Seek(0, SeekOrigin.Begin);
            StreamReader reader = new StreamReader(sm);
            string strSSOIdentity = reader.ReadToEnd();
            reader.Close();


strSSOIdentity的值如下所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值