php站,访问量比较多的情况下,是不是使用session不合适 15
看到有的cms使用session类,就是模拟session的机制,用数据库存储一些用户信息,这是不是说明使用session会带来一些弊端,毕竟php的session都是现...
看到有的cms使用session类,就是模拟session的机制,用数据库存储一些用户信息,这是不是说明使用session会带来一些弊端,毕竟php的session都是现成的,谁也不会闲着没事儿搞个没用的东西,而且看到一个国外的博客,他就说自己除了必要的地方,如验证码,基本不用session,哪位大哥懂得,给小弟讲讲这是为什么
展开
3个回答
2012-03-29
展开全部
1、如果大点的网站使用 Session 是不是不合适?有什么损害? 优点 如果要在诸多Web页间传递一个变量,那么用Session变量要比通过QueryString传递变量可使问题简化。 要使WEb站点具有用户化,可以考虑使用Session变量。你的站点的每位访问者都有用户化的经验,基于此,随着LDAP和诸如MS Site Server等的使用,已不必再将所有用户化过程置入Session变量了,而这个用户化是取决于用户喜好的。 你可以在任何想要使用的时候直接使用session变量,而不必事先声明它,这种方式接近于在VB中变量的使用。使用完毕后,也不必考虑将其释放,因为它将自动释放。 缺点 Session变量和cookies是同一类型的。如果某用户将浏览器设置为不兼容任何cookie,那么该用户就无法使用这个Session变量! 当一个用户访问某页面时,每个Session变量的运行环境便自动生成,这些Session变量可在用户离开该页面后仍保留20分钟!(事实上,这些变量一直可保留至“timeout”。“timeout”的时间长短由Web服务器管理员设定。一些站点上的变量仅维持了3分钟,一些则为10分钟,还有一些则保留至默认值20分钟。)所以,如果在Session中置入了较大的对象(如ADO recordsets,connections,等等),那就有麻烦了!随着站点访问量的增大,服务器将会因此而无法正常运行! 因为创建Session变量有很大的随意性,可随时调用,不需要开发者做精确地处理,所以,过度使用session变量将会导致代码不可读而且不好维护。 虽然“你可以在任何想要使用的时候直接使用session变量,而不必事先声明它,这种方式接近于在VB中变量的使用。使用完毕后,也不必考虑将其释放,因为它将自动释放”。但是,“谁”想到那儿呢?变量的含义是什么?这些都变得不很清晰。 使用Session变量既有优点,又有缺点。就我个人的观点,最好少用,但在某些地方使用它们确实能使Web开发大大地简化。是否使用Session变量完全取决于个人的需要,无论使用与否,都要事先考虑其优缺点 2、如何截取Session超时 <?php session_start(); $_SESSION[loginTime] = time(); header('location:2.php'); ?> 保存为1.PHP,假设你的用户成功登陆,自动跳转到2.PHP <?php session_start(); if(time() > $_SESSION[loginTime] + 5) echo '超时'; else echo '未超时'; ?> 刷新2.PHP,会在5秒后显示超时,大体思路是这样的,具体情况具体分析,祝你好运
~
展开全部
系统默认的session在访问较大的网站使用不太适合,原因有几个
1)SESSION默认是写文件,会导致session文件一致累加,同时也会受到硬盘空间的限制
2)SESSION默认写文件,没办法多台服务器共享,做分布就每没办法做~
3)服务器重启之后,SESSION文件被清空,意味着所有用户都会被踢下线~
所以,一般访问量比较大的网站,都考虑用其他实现方式,一般有
1)用数据库来存放session信息,这个是比较通用的做法
2)用memcached来存储session数据,这个需要有修改php配置和架设memcached的权限,配置完与普通SESSION使用方式一样,但是普通的空间明显没办法解决,因此不是适合于非托管站长
3)用NFS来做网络文件共享,将session挂在到网络硬盘,这个也需要服务器的配置权限,而且访问比较大的时候NFS的弊端很多~~
上面三种解决方案都解决了共享SESSION的问题,以及SESSION持久存储的问题,但是考虑到很多站长不会配置或者没有权限配置服务器,因此一些开源软件都采用第一种实现方式,既支持了分布式,又避免了系统配置的依赖~~
1)SESSION默认是写文件,会导致session文件一致累加,同时也会受到硬盘空间的限制
2)SESSION默认写文件,没办法多台服务器共享,做分布就每没办法做~
3)服务器重启之后,SESSION文件被清空,意味着所有用户都会被踢下线~
所以,一般访问量比较大的网站,都考虑用其他实现方式,一般有
1)用数据库来存放session信息,这个是比较通用的做法
2)用memcached来存储session数据,这个需要有修改php配置和架设memcached的权限,配置完与普通SESSION使用方式一样,但是普通的空间明显没办法解决,因此不是适合于非托管站长
3)用NFS来做网络文件共享,将session挂在到网络硬盘,这个也需要服务器的配置权限,而且访问比较大的时候NFS的弊端很多~~
上面三种解决方案都解决了共享SESSION的问题,以及SESSION持久存储的问题,但是考虑到很多站长不会配置或者没有权限配置服务器,因此一些开源软件都采用第一种实现方式,既支持了分布式,又避免了系统配置的依赖~~
更多追问追答
追问
我主要想问下用数据库存储session,这种方法是怎么实现的,我的意思是,程序怎么区分哪个记录是属于哪个会员的,看过一些源码,记录了ip,但是ip这东西明显不靠谱吧,比如网吧或一些公司内部,IP都是一个
追答
用户访问的时候,会有一个SESSIONID,是通过这个session_id 来识别唯一用户的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-04-02
展开全部
用户访问量比较大的网站如果用session会比较浪费硬盘的空间,因为session的默认方式是写文件的,可以使用数据库,memcache等方式,修改php.ini即可,如果记录的是用户的登录登录状态用session即可,用的网站记录用户的登录状态使用的是servermedia等
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询