记一次Nancy 框架中遇到的坑

   前几天,公司一个项目运行很久的Nancy框架的网站,遇到了一个很诡异的问题。Session 对象跳转到另外一个页面的时候,session对象被清空了,导致用户登录不上。搞了两天,终于解决了。于是把它记录下来,以避免其他人也碰到这种情况。

  起因

  公司一个Nancy 框架 开发的web网站,以前一直都是好的,nancy 框架也用在了很多项目里面,基本上已经很成熟很稳定了,但是在前几天发布某个web网站的时候,竟然出现部分用户登录不上的情况。刚开始以为是人员的权限有问题,于是检查各个人员的权限。但是发现权限设置没问题,而且同一个角色下的两个人,竟然还会出现一个用户能登陆,而另一个却不能登陆的诡异情况。

  调查

   在确认不是系统权限设置的问题之后,开始debug 跟踪调试。发现本来已经登陆成功,存储用户登陆信息的session对象,在跳转到index 页面之后,session 对象竟然不清空了,这是怎么回事呢,可是也不是所有的用户的登陆session都会被清空,而是部分人的session对象被清空了,而且登陆功能,在前期一直都是正常的,没出现过这种情况。

  1. 首先怀疑session存储的对象,最近是不是有变动,询问后,发现,User 对象最近确实是增加了一个字段,但是增加一个字段,怎么会影响到session的存储呢,

  2. 把新加的字段去掉,原先不能登陆的用户,竟然能够可以登陆成功,但是其他的一些用户,还是不能登陆,于是开始比较能登陆的用户和不能登陆的用户的数据有什么不同。有可能还是数据的原因,对比之后发现用户数据基本没什么问题,但是普遍的是能登陆上的用户的信息都比不能登陆上的用户的信息要少。

  3. 于是基本可以断定是由于session 存储的用户数据的大小导致的。可是,Nancy 框架下的session 会对 存储数据的大小有限制呢。

  解决

  既然知道问题出在哪,于是去jabbr 里Nancy聊天室问框架的作者。老外表示:Nancy的session机制, 是基于cookie 的,客户端和服务器交互的cookie 大小限制在4k 以下,超过4k 就会获取不到。

  但是经过我们的反复测试,确定限制是在2k,而不是4k,我去,坑啊。但是不管是4k还是2k 确实是有这个限制存在。

  于是问他这个能否设置大一点。老外答复说:大小不能设置,只能修改存存储对象的大小,因为他们在设计之初的时候,session 就不是用来存用户的全部信息的。而是只存用户主要信息或是用户的唯一ID ,到用到用户的信息的时候,再去数据库里面读取。

  看来只能减少用户信息的大小了。于是去掉了Session 里面的User 对象de 一些没有用的字段。果然所有的用户都能进了。 折腾了2天的问题,终于解决。

Nancy总结(二)记一次Nancy 框架中遇到的坑的更多相关文章

  1. C# 委托和事件(二):使用.Net框架中的EventArgs和EventHandler

    前面一篇里提到事件是通过委托来进行关联的,而委托是可以带各种各样的参数的,其中就可以用事件参数(EventArgs),同时,也可以用.Net框架里边提供的一个委托EventHandler来Handle ...

  2. ABP源码分析二十六:核心框架中的一些其他功能

    本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...

  3. 架构师养成记--16.disruptor并发框架中RingBuffer的使用

    很多时候我们只需要消息中间件这样的功能,那么直需要RinBuffer就可以了. 入口: import java.util.concurrent.Callable; import java.util.c ...

  4. 记前端状态管理库Akita中的一个坑

    记状态管理库Akita中的一个坑 Akita是什么 Akita是一种基于RxJS的状态管理模式,它采用Flux中的多个数据存储和Redux中的不可变更新的思想,以及流数据的概念,来创建可观察的数据存储 ...

  5. geotrellis使用(二)geotrellis-chatta-demo以及geotrellis框架数据读取方式初探

    在上篇博客(geotrellis使用初探)中简单介绍了geotrellis-chatta-demo的大致工作流程,但是有一个重要的问题就是此demo如何调取数据进行瓦片切割分析处理等并未说明,经过几天 ...

  6. 二十二、【轻量级开源框架】EFW框架Web前端开发之JqueryEasyUI

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan ...

  7. Yii框架学习笔记(二)将html前端模板整合到框架中

    选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/ ...

  8. 《Data-Intensive Text Processing with mapReduce》读书笔记之二:mapreduce编程、框架及运行

    搜狐视频的屌丝男士第二季大结局了,惊现波多野老师,怀揣着无比鸡冻的心情啊,可惜随着剧情的推进发展,并没有出现期待中的屌丝奇遇,大鹏还是没敢冲破尺度的界线.想百度些种子吧,又不想让电脑留下污点证据,要知 ...

  9. Python开发【第二十二篇】:Web框架之Django【进阶】

    Python开发[第二十二篇]:Web框架之Django[进阶]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...

随机推荐

  1. 【BZOJ 3053】The Closest M Points

    KDTree模板,在m维空间中找最近的k个点,用的是欧几里德距离. 理解了好久,昨晚始终不明白那些“估价函数”,后来才知道分情况讨论,≤k还是=k,在当前这一维度距离过线还是不过线,过线则要继续搜索另 ...

  2. angular指令大全

    这篇文章的案例都是来自官方,引用的cdn来自bootcss, 因为angular的官方网站被屏了, 所以要翻, 不过我把整个文档下回来了,方便大家下载可以点击: 打开下载英文版 angular的指令 ...

  3. ArcGIS 帮助(10.2、10.2.1 和 10.2.2)收集

    帮助首页 [Oracle基础] 快速浏览:Oracle 地理数据库 什么是 Oracle Spatial? 设置到 Oracle 的连接 存储在 Oracle 地理数据库中的系统表 结合企业级地理数据 ...

  4. iOS之类的本质

    1.本质 类的本质其实也是一个对象(类对象) 程序中第一次使用该类的时候被创建,在整个程序中只有一份. 此后每次使用都是这个类对象,它在程序运行时一直存在. 类对象是一种数据结构,存储类的基本信息:类 ...

  5. MWeb

    专业的 Markdown 写作支持 极简 UI.Dark Mode.漂亮的 Markdown 语法高亮.列表缩进优化,提供 5 种主题选择. 除了支持基本的 Markdown 语法外,还支持大量 Ma ...

  6. Visual Studio 2015出现Cannot find one or more components. Please reinstall the application.的问题解决

    cd C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE devenv.exe /resetuserdata devenv. ...

  7. Linux文件系统介绍(转)

    文章转自:http://www.iteye.com/topic/816268 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文 ...

  8. Android成长日记-使用ViewFlipper实现屏幕切换动画效果

    (一) ViewFlipper介绍 Android系统自带的一个多页面管理控件,它可以实现子界面的自动切换 (二) 为ViewFlipper加入View 1. 静态导入:在Layout布局文件中直接导 ...

  9. excel处理数字的时候避免自动转为double

    帮同事解决了一个POI解析Excel的功能,就是他想读出单元格中的原始内容,但是poi在处理数字的时候会自动转换为double了,这样对于一些对1和1.00有严格区分的场景下,会出现问题.我看网上很多 ...

  10. python编码

    一.编码 常见的编码比较: ascii:1个字节 unicode:2个字节 utf-8:英文1个字节,汉字3个字节 二.一个编码问题 问:如下代码设置了在代码中添加了coding: utf-8,但是在 ...