本文主要介绍PHPSESSION跨页传输失败的解决方法。有需要的朋友可以参考今天用一个session实现用户登录判断的思路,也算是对之前session的一种探索。检查以下信息。对于一个session,服务器首先会检查请求中是否包含唯一的sessionID。如果是,则意味着服务器已经为用户创建了一个会话。只需根据sessionID获取用户的session,供用户使用即可。如果没有sessionID,服务器会为用户创建一个具有唯一sessionID的新会话。创建完成后,sessionID会由服务端返回给客户端,保存在客户端本地。一般保存sessionID的机制是Cookie,但是由于可以人为禁止Cookies,所以需要保证禁止Cookies后,session仍然可以通过session进行,一般是通过url重写,形式为www.fckfs.comByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764这两种方式对于用户来说是没有区别是的,只是服务器在解析的时候处理不一样而已。使用第一种方法也有利于区分sessionid信息和正常的程序参数。为了在整个交互过程中保持状态,需要在每个客户端可能请求的路径之后包含这个sessionid。另一个关于session失效的误解:在讲session机制的时候,经常听到这样的误解“只要关闭浏览器,session就消失了”。其实大家可以想象一下会员卡的例子。除非顾客主动把卡卖给店家,否则店家绝不会轻易删除顾客的资料。会话也是如此。除非程序通知服务器删除会话,否则服务器将永远保留它。程序一般会在用户注销时发送删除会话的命令。但是浏览器在关闭前从来不会主动通知服务器自己将要关闭,所以服务器永远没有机会知道浏览器已经关闭。造成这种错觉的原因是大部分session机制使用sessioncookies来保存sessionids,关闭浏览器后sessionid消失,再次连接服务器时就找不到原来的session了。如果将服务器设置的cookie保存到硬盘,或者通过某种手段改写浏览器发送的HTTP请求头,将原来的sessionid发送给服务器,打开仍然可以找到原来的session再次浏览器。正是因为关闭浏览器不会导致session被删除,迫使服务器为session设置一个过期时间。当客户端最后一次使用会话的时间超过这个过期时间时,服务器可以认为客户端已经停止了它的活动。该会话将被删除以节省存储空间。好了,废话说了一大堆,下面说说session丢失的解决方法:1.session_start();尽可能放在页面顶部;2.如果php.ini中没有配置sessionAutostart,每次session之前,需要手动开启session:session_start();3、session在php中是一个超级全局变量,与$_GET、$_POST、$_SERVER一样,所以使用时必须大写:$_SESSION['username']=$username;4、跨页传输示例:a.php页面传输$_SESSION['username']到b.php:a.php:session_start();$username=$_POST['username'];$_SESSION['username']=$username;?>b.php:session_start();echo$_SESSION['username'];?>来自个人文章-SegmentFault思否
