session保存在数据库中,禁用对cookie的处理=会话管理主要包括cookie和session。Cookies可以记录客户端的信息,而session记录的是服务器端的信息。典型应用场景:当我们登录一个网站时,我们的登录信息会保存在session中,然后在一些需要用户登录才能操作的地方,可以通过session来判断用户的合法性。用户每次登录得到的==sessionID==是唯一的,这个sessionID可以保存在客户端,也可以通过网络传输。客户端也可以通过cookie或者url传输的方式传递sessionID,从而获取到服务器端保存的session信息。包含一个session标识——叫做sessionid,如果包含一个sessionid,说明之前已经为这个client创建了一个session,服务端会根据sessionid检索session(如果检索不到,可能会创建一个新的sessionid)1)、如果客户端请求不包含sessionid,则为客户端创建session,并生成与session关联的sessionid。sessionid的值应该是一个既不重复又不易被发现模仿的字符串。sessionid会在这个响应中返回给客户端保存。Cookies可以用来保存sessionid,这样浏览器在交互过程中就可以自动按照规则向服务器显示这个标识。将session数据存储到数据库中session的默认存储是通过创建一个名为sessionID的文件来存储的。使用MySQL保存session相对于文件有很多优点:1)有利于分布式系统,文件只能保存在一台机器上2)有利于访问量大的系统,使用文件时,每个session保存在一个文件,目录会很大,会很难找到session文件。禁用cookies的影响由于cookies可以被人为禁止,服务器无法在用户本地保存sessionid。我们需要一个解决方法来实现会话机制。执行过程更改php.ini文件。find//php默认的session保存方式session.save_handler=files//使用cookie(sessioncookie)来存储sessionidsession.use_cookies=1//只使用sessioncookie来存储sessionid。session.use_only_cookies=1//会话cookie的名称是PHPSESSID。session.name=PHPSESSID//seesioncookie生命周期,默认情况下,一旦浏览器关闭,session就会被销毁session.cookie_lifetime=0//让PHP跨页面自动传递sessionidsession.use_trans_sid=0;修改为//将session模式改为用户自定义session.save_handler=usersession.use_cookies=0session.use_only_cookies=0//让PHP跨页面自动传递sessionidssession.use_trans_sid=1设置用户自定义session存储功能测试代码通过session_set_save_handler()//DatabaseCREATETABLE`Session`(`Session_Id`varchar(255)COLLATEutf8_unicode_ciNOTNULL,`Session_Expires`datetimeNOTNULL,`Session_Data`textCOLLATEutf8_unicode_ci,PRIMARYKEY(`Session_Id`))ENGINE=InnoDBDLLEFAULT8CH=utf8_unicode_ci;SELECT*FROMmydatabase.Session;session.phplink=$link;退役是真的;}else{返回错误;}}publicfunctionclose(){mysqli_close($this->link);返回真;}publicfunctionread($id){$result=mysqli_query($this->link,"SELECTSession_DataFROMSessionWHERESession_Id='".$id."'ANDSession_Expires>'".date('Y-m-dH:i:s')."'");如果($row=mysqli_fetch_assoc($result)){var_dump($row);返回$row['Session_Data'];}else{返回“”;}}publicfunctionwrite($id,$data){$DateTime=date('Y-m-dH:i:s');$NewDateTime=date('Y-m-dH:i:s',strtotime($DateTime.'+1hour'));$result=mysqli_query($this->link,"REPLACEINTOSessionSETSession_Id='".$id."',Session_Expires='".$NewDateTime."',Session_Data='".$data."'");如果($结果){返回真;}else{返回错误;}}公共函数销毁y($id){$result=mysqli_query($this->link,"DELETEFROMSessionWHERESession_Id='".$id."'");如果($结果){返回真;}else{返回错误;}}publicfunctiongc($maxlifetime){$result=mysqli_query($this->link,"DELETEFROMSessionWHERE((UNIX_TIMESTAMP(Session_Expires)+".$maxlifetime.")<".$maxlifetime.")");如果($结果){返回真;}else{返回错误;}}}$handler=newSysSession();session_set_save_handler($handler,true);?>page1.php测试";?>page2.php
