PHP会话机制的介绍和使用
当服务器创建会话(session_start())时,服务器将在服务器的指定文件夹下创建一个名为sessionID的会话文件,并将其作为cookie的值发送给浏览器。每次浏览器访问服务器时,都会带着这个cookie,服务器会识别并更改sessionID,找到对应的会话文件。几个键值对存储在这个文件中。存储会话文件的文件夹可以在配置文件中修改。
每次请求页面时都会验证Cookie。如果用户信息存储在数据库中,每次都会执行一次数据库查询,会给数据库造成不必要的负担。Cookie可以修改,所以安全系数太低。
Session是存储在服务器端的会话,相对安全,不像Cookie那样有存储长度的限制。由于会话以文本文件的形式存储在服务器中,客户端不怕修改会话内容。其实在服务器端的session文件中,PHP自动修改了Session文件的权限,只保留了系统的读写权限,ftp无法修改,安全多了。
至于cookies,如果我们想验证用户是否登录,就必须将用户名和密码(可能是md5加密字符串)保存在cookies中,并在每次请求页面时进行验证。
如果用户名和密码存储在数据库中,每次都会执行一次数据库查询,会给数据库造成不必要的负担。因为我们不能只做一个验证。为什么呢?
因为客户端Cookie中的信息可能会被修改。如果存储$admin变量来指示用户是否登录,当$admin为真时,表示登录,当它为假时,表示没有登录。第一次身份验证后,在Cookie中存储等于true的$admin,下次就不需要身份验证了。是这样吗?错了,如果有人伪造了一个值为true的$admin变量,是不是马上就拿走了管理权限?非常不安全。
另一方面,会话存储在服务器上,因此远程用户不能修改会话文件的内容。因此,我们可以简单地存储一个$admin变量来判断是否登录。第一次验证后,将$admin的值设置为true,然后判断该值是否为true。如果没有,转到登录界面,这样可以减少很多数据库操作。
而且可以减少每次通过密码验证Cookie的不安全性(会话验证只需要通过一次,如果不使用SSL安全协议的话)。即使密码是用md5加密的,也很容易被截获。
会话将为每个打开会话的访问者建立一个唯一的会话标识,用于标识用户。会话标识可以存储在用户计算机的cookie中,也可以通过网址传输。而对应的具体会话值会存储在服务器端,这也是与cookie的主要区别,安全性相对较高。
创建会话
要创建会话或返回现有会话,必须首先使用session_start()函数打开会话,系统将分配一个会话ID:
?PHP session _ start();//此函数没有参数,所有返回值都为真。最好先放这个功能,之前应该没有输出,否则会报警?注册会话变量。
使用session_register()函数注册会话变量并成功返回TRUE否则,返回FALSE。
语法:boolsession _ register(混合名称[,混合.])
使用session_register()函数在当前会话下注册一个或多个全局会话变量。参数名是要添加的变量的名称,如果成功,逻辑值将作为true返回。您可以采用$_SESSION[name]或$HTTP_SESSION_VARS[name]的形式来取值或赋值。
示例:
?PHP session _ start();$ username=' nostopsession _ register(' username ');在这个例子中,我们向会话注册了一个名为username的变量,它的值是nostop。
读取会话
PHP中内置的$_SESSION变量可以轻松访问设置的SESSION变量。
示例:
?PHP session _ start();Echo的注册用户名为:“”。$ _ SESSION[' username '];//输出注册的用户名为:nostop?销毁会话
Session_unregister()取消注册单个会话变量unset($ _ SESSION[' age ']);用于注销用$_SESSION['age']注册的会话变量session_unset(),并删除所有注册的变量session_destroy(),以注销所有会话变量并注销整个会话。
示例:
?PHP session _ start();session _ unregister(' username ');//注销变量session _ unset();//注销会话会话?检查变量是否注册为会话变量。
会话已注册
语法:boobean session _ is _ registered(字符串名称);
这个函数可以检查指定的变量在当前会话中是否已经注册,参数名就是要检查的变量名。成功返回逻辑值true。
示例:
?PHP session _ start();if(!session _ is _ registered(' gender '){//判断当前会话变量是否注册了session _ register(' gender ');//Register变量} $性别='女';echo $ _ SESSION[' gender '];//女?访问当前会话名称。
会话名称
语法:布尔session _ name(字符串[name]);
该函数可以获取或重置当前会话的名称。如果没有参数名,则获取当前会话名,如果有参数,则将会话名设置为参数名。
示例:
?PHP $ session name=session _ name();//获取当前Session名称,默认为phpsessid $ Session id=$ _ get[$ Session name];//获取Session id Session _ id($ Session id);//使用session_id()设置获取的Session ID?访问当前会话标识号。
会话id
语法:布尔session_id(字符串[id]);
该功能可以获取或重置当前存储会话的标识号。如果没有参数id,则表示只获取当前会话的id号,如果添加了参数,则表示将会话的ID号设置为新指定的ID。
设置会话的生存期。
Setcookie:向客户端发送一个HTTP cookie。
?session _ start//节省一天$ lifeTime=24 * 3600setcookie(session_name()、session_id()、time() $lifeTime,'/');Session _ set _ cookie _ params:设置会话的生存期,在调用session_start()函数之前必须调用该生存期。如果客户端使用IE 6.0,则为session _ set _ cookie _ params();设置cookie存在一些问题,所以我们手动调用setcookie函数来创建cookie。
//保存一天。
?php $ lifeTime=24 * 3600session _ set _ cookie _ params($ LifeTime);session _ start();$ _ session[' admin ']=true;设置会话文件的保存路径。
Session_save_path():必须在调用session_start()函数之前调用。
?Php//设置一个存储目录$savePath='。/session _ save _ dir/';//节省一天$ lifeTime=24 * 3600session _ save _ path($ SavePath);session _ set _ cookie _ params($ LifeTime);session _ start();$ _ session[' admin ']=true;PHP session _ start();//启动会话$ username=' nostopsession _ register(' username ');//注册一个名为username变量echo ':'的注册用户。$ _ SESSION[' username '];//注册用户:nostop读取Session变量$ _ SESSION[' age ']=23;//声明一个名为age的变量,并分配echo' age:'。$ _ SESSION[' age '];//年龄:23 ession _ unregister(' username ');//注销Session变量echo $ _ Session[' username '];//空echo $ _ SESSION[' age '];//23 unset($ _ SESSION[' age ']);//注销会话变量echo“注册用户:“”。$ _ SESSION[' username '];//空回声“age:”。$ _ SESSION[' age '];//空?
版权声明:PHP会话机制的介绍和使用是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。