记一次Nancy 框架中遇到的坑

记一次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 框架中遇到的坑,布布扣,bubuko.com

时间: 2024-10-12 02:51:59

记一次Nancy 框架中遇到的坑的相关文章

Foundation框架中一些类的使用

提示:  这篇博文主要介绍了Foundation框架中一些类的使用方法,都是以代码方式展示的,可能会比较乱,但都是些常用的方法,这些方法常用自然就会记住所以不用纠结,注意主要记方法的第一个单词,单词不认识的话可以记前三个字母,再配合提示查找 ------------------------------------------------------------------------------------------------------------------ NSURL简介 什么是URL

Nancy 框架

Nancy 框架 1.是一个轻量级用于构建http相应的web框架: 2.与mvc类似,有自己的路由机制: 3.可以处理 DELETE ,  GET ,  HEAD ,  OPTIONS ,  POST ,  PUT 和 PATCH等请求: 4.完美支持OWIN(可以说他就是为OWIN而生的): 1.创建项目 打开vs,创建asp.net项目,选择empty模板: 如图 2.安装模板 Package Manage Console,输入命令 Install-Package NancyInstall

ASP.NET Core开发-使用Nancy框架

Nancy简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方式,并提供一个super-duper-happy-path所有交互. Nancy 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT和 PATCH 等请求方法,并提供简单优雅的 DSL 以返回响应.让你有更多时间专注于你的代码和程序. 官方地址:http:

MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(六) MapperRegistry> 中我们知道DefaultSqlSession的getMapper方法,最后是通过MapperRegistry对象获得Mapper实例: public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final MapperProxyFactory<T> mapperProxyFactory =

OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)

1.NSNumber 这个类主要是用来封装基本类型的,说到这里,就不得不说一下了: OC中的集合是不允许存入基本类型的,所以NSNumber类就诞生了,需要将基本类型封装一下,然后存进去,这个类似于Java中的自动装箱和拆箱,Java中的集合其实也是不允许存入基本类型的,但是我们任然看可以那么操作,就是因为有自动装箱功能,如果你将Eclipse的JDK改成5.0之前的,你看看还能操作吗.. 注:那为什么基本类型不能存入到集合中呢? 原因是在操作集合的时候会操作集合元素中的方法,但是基本类型是没有

MVC框架中的值提供(一)

在MVC框架中action方法中的Model数据的绑定的来源有很多个,可能是http请求中的get参数或是post提交的表单数据,会是json字符串或是路径中的相关数据;MVC框架中针对这些不同的数据来源抽象了IValueProvider接口; public interface IValueProvider { bool ContainsPrefix(string prefix); ValueProviderResult GetValue(string key); } IValueProvide

SSM框架中使用Spring的@Transactional注解进行事务管理

一 介绍 在企业级应用中,保护数据的完整性是非常重要的一件事.因此不管应用的性能是多么的高.界面是多么的好看,如果在转账的过程中出现了意外导致用户的账号金额发生错误,那么这样的应用程序也是不可接受的 数据库的事务管理可以有效地保护数据的完整性(PS:关于数据库的事务管理基础可以参考我以前写过的这篇文章:http://www.zifangsky.cn/385.html),但是原生态的事务操作需要写不少的代码,无疑是非常麻烦的.在使用了Spring框架的应用中,我们可以使用@Transactiona

MyBatis框架中Mapper映射配置的使用及原理解析(三) 配置篇 Configuration

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder> 我们知道XMLConfigBuilder调用parse()方法解析Mybatis配置文件,生成Configuration对象. Configuration类主要是用来存储对Mybatis的配置文件及mapper文件解析后的数据,Configuration对象会贯穿整个Mybatis的执行流程,为Mybatis的执行过程提供必要的配

MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder

在 <MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用> 的demo中看到了SessionFactory的创建过程: SqlSessionFactory sessionFactory = null; String resource = "mybatisConfig.xml"; try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources .getResourceAsRea