微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异
前言:由于开发人员要靠工具吃饭,可能和开发工具、语言、环境呆的时间比和老婆孩子亲人在一起的时间还多,所以每个人或多或少对自己吃饭的工具在感性上带有宗教情结,在理性上又受屁股决定大脑利益左右,这种比较一般都容易遭人争议, 这些比较不带任何偏见和感情色彩,主要是自己工作中记录在有道云笔记的经验日记主要是给I自己学习备查用,写得多了就有参考价值分享出来给需要的人参考,如果有任何争议本人不作辩解。这只代表本人自己的理解印象。
Session篇:
PHP默认使用文件存储session数据, asp.net 默认保存在IIS进程内存中

PHP方式优点:稳定可靠不易丢失,nginx或apache服务器重启不影响session丢失,session稳定可靠。整过机制简易透明,用户可以直接删除session目录下的文件让session失效,可以方便地实现asp.net 很难实现的一些特殊需求,如需要在用户的请求或系统某些事件发生后要让指定的A用户session失效,然后必须强制从数据库读最新记录,假如有这一样矛盾的性能优化场景设计:假如用户表User有余额字段Balance, 要让用户A登录自己的后台看到自己的余额是最新的,而又不想每刷新一次面就请求一次数据库造成不必要的压力,最好的做法是把某用户的记录实体保存在Session当中,每次从Session中读取自己的余额字段显示,就不会给数据库造成压力,只有当余额字段 Balance变化后即时清除掉这用户的Seesion然后强制让他去读最新的数据库字段,但当其它事件发生时如:其它用户给A转账后要清除A的缓存,系统发生的退款、扣款、奖励到余额引起余额变化时要清除A的缓存,由于php的透明机制直接删除对应session文件就可以,但用iis就很麻烦了,由于微软偏向于session放在内存中,封闭成黑盒又没提供对应操作接口就悲剧了,只有通过其他办法曲线救国。
PHP方式缺点:性能欠佳不如保存在内存里快,而且产生大量的小文件,反复创建删除 这些小文件会造成磁盘碎片久而久之会拖慢整个磁盘的性能,产生大量文件句柄占用操作系统文件句柄,进而影响性能,网站访问量上升后是个悲剧,可能在一个目录下产生数百万个小文件,即时运行在linux这样一切皆文件思想的操作系统上也是非常影响文件系统性能,会严重拉低整个操作系统的磁盘性能。所以这个默认机制性能上不如IIS的默认存储在进程存储快。 那些神吹开源技术性能设计比windows先进的人自行打脸,最近深入了解lamp,lnmp后发现有很多过时的设计无法跟上时代,如php无法使用真正的数据库连接池等很多比原本想像来严重得多的问题,当然 般都会有第三方非主流折腾代替的方案,如使用memcache内存方式保存session在内存中也是可以的,但需要手工折腾一下。
PHP分布式session的支持:在高并发多台服务器负载均衡的环境中,两台nginx 或apache要共享session 一般是把session保存在数据库中,然后不同的负载主机共连一个数据库来实现,数据库的性能和读写文件实际没有本质区别,稳定性依然强,但性能依然是弱点。
 
ASP.NET方式优点:速度快,不用读写磁盘显然这是很自然的是
ASP.NET方式缺点:很不稳定,不要说重启IIS网站这样的极端操作会丢失Session,就算是改动了配置文件 web.config或者变动了bin目录下的dll导致网站重新编译的操作都会重置内存导致Session丢失,这就是为什么在asp.net 开始调试期间常常遇到测试人员登录系统没几秒就可能session丢失的奇怪幻像,一般都是有程序员在频繁更新程序,只要更新一次就全面丢失一次session; 微软的解决方案也足够简单好用,使用一个独立的ASP.NET State Service状态服务进程来保存session信息,注意使用ASP.NET State Service后数据还是保存在内存中,只不过是一个独立的服务进程,默认通过监听tcpip=127.0.0.1:42424端口跨进程通信保存信息,
这样就算IIS重启也不会导致用户登录session丢失,稳定性解决了,同时数据还是保存在内在中速度性能远高于php的文件存储方案。而且状态服务每台电脑都默认安装,只需要启动就行。方便性和性能已经甩下php不在一个级别了。
ASP.NET分布式session的实现:在高并发多台服务器负载均衡的环境中,两台IIS要共享session非常简,只需要共同连接一台状态服务器就可以共享session,通过简单设置就可以让状态服务打开远程访问功能。当然asp.net也是支持把session保存到数据库的,但很少有人这样用没有太大的理由采用这种方案。
SESSION管理总结:可以看到php和asp.net的session管理机制上走的两个不同的哲学方向,php稳定易于实现、偏爱对硬盘存储,微软asp.net偏爱内存里存储,实现难度要高于php,这是是商业软件和开源免费软件比较典型的特征,商业软件一般实现一个各方面都要优于免费一点东西,封装个黑盒给你直接用,但特殊的需求不方便搞。
 

微软与开源干货对比篇_PHP和 ASP.NET在 Session实现和管理机制上差异的更多相关文章

  1. 喜大本\\ u0026普,微软的开源

    词汇表--喜大本\\ u0026普:爱过.有趣的游戏,庆祝.奔走相告.简而言之<reload=1">微软宣布.NET开发环境开源>是个好消息. 前言及历史回想 就我个人来说 ...

  2. DICOM:DICOM三大开源库对比分析之“数据加载”

    背景: 上一篇博文DICOM:DICOM万能编辑工具之Sante DICOM Editor介绍了DICOM万能编辑工具,在日常使用过程中发现,“只要Sante DICOM Editor打不开的数据,基 ...

  3. Farseer.net轻量级开源框架 中级篇:常用的扩展方法

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: BasePage.BaseController.BaseHandler.BaseM ...

  4. [转]Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多 ...

  5. Android开源项目第二篇——工具库篇

    本文为那些不错的Android开源项目第二篇——开发工具库篇,**主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容 ...

  6. Android开源项目第一篇——个性化控件(View)篇

    本文为那些不错的Android开源项目第一篇——个性化控件(View)篇,主要介绍Android上那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Ga ...

  7. Android开发UI之开源项目第一篇——个性化控件(View)篇

    原文:http://blog.csdn.net/java886o/article/details/24355907 本文为那些不错的Android开源项目第一篇——个性化控件(View)篇,主要介绍A ...

  8. 微软Build2014大会干货总结-2

    继昨天微软在Build2014大会上宣布一系列重磅举措后,第二天的主题是微软云(Microsoft Azure)及开发者战略,CSDN记者继续从旧金山现场给您发来一线报道. 第二天的主角是新上任的微软 ...

  9. 微软爱开源:向Linux社区开放60000多项专利

    10月10日,微软在博客中宣布正式加入开放创新网络(Open Invention Network, 简称“OIN”),向所有开源专利联盟的成员开放其专利组合. 微软的加入意味着,旗下60000多项专利 ...

随机推荐

  1. openlayers4 入门开发系列之台风轨迹篇

    前言 openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子 ...

  2. Android之Fragment详解

    文章大纲 一. 什么是Fragment二. Fragment生命周期三. Fragment简单实例四.Fragment实战五.项目源码下载六.参考文章   一. 什么是Fragment Fragmen ...

  3. 逆向-攻防世界-crackme

    查壳,nSpack壳,直接用软件脱壳,IDA载入程序. 很明显,就是将402130的数据和输入的数据进行异或,判断是否等于402150处的数据.dwrd占4字节. 这道题主要记录一下刚学到的,直接在I ...

  4. 抽象类(abstract class)与接口(interface)的异同

    抽象类:如果一个类中包含抽象方法,那么这个类就是抽象类.在Java语言中,可以通过把类或类中的某些方法声明为abstract(abstract只能修饰类或方法,不能修饰属性)来表示一个类是抽象类. 接 ...

  5. 【重学计算机】计组D2章:数据表示

    1.基本概念 真值:+0101,-0100:机器数: [x]原=0101 2.几种机器数 原码:x = -0101,[x]原 = 1101 反码:x = -0101,[x]反 = 1010 补码:x ...

  6. WebPack引用Bootstrap 无法使用图标的结局方案

    npm i https://github.com/iconic/open-iconic.git -D  因为boostrap的css里删除了图标 分开了 我们在引入个呵呵. 下载:npm i boot ...

  7. NotificationSetUtilDemo【判断APP通知栏权限是否开启,以及如何跳转到应用程序设置界面】

    前言 当APP有推送功能时,需要判断当前app在手机中是否开启了允许消息推送,否则即使添加了推送代码仍然收不到通知. 效果图 oppo上的效果: 使用步骤 一.项目组织结构图 注意事项: 1.  导入 ...

  8. asp.netcore 深入了解配置文件加载过程

    前言     配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json, ...

  9. java并发多线程显式锁Condition条件简介分析与监视器 多线程下篇(四)

    Lock接口提供了方法Condition newCondition();用于获取对应锁的条件,可以在这个条件对象上调用监视器方法 可以理解为,原本借助于synchronized关键字以及锁对象,配备了 ...

  10. Cookie浅析

    Cookie  翻阅了好久关于Cookie的博客及文档,感觉一直有一块结没有解开,所以一直难以在脑中形成一个顺畅的知识脉络.最后实在是遭不住,拉上我的大神朋友在食堂里坐了3个小时,问了个底朝天!总算形 ...