PHP中session共享和登录验证的实现方法
我们先来讲述一下利用session来登录
登录页面05.php的代码如下:
代码如下 | 复制代码 |
<?php session_start() ; //初始化session if (isset ($_SESSION['shili'])){ header ("Location:shili.php") ; //重新定向到其他页面 exit ; } ?> <script language="javascript"> function checklogin (){ if ((login.username.value!="") && (login.password.value!="")) return true //判断用户名和密码不为空,返回TRUE else{ alert ("昵称或密码不能为空!") } } </script> <style type="text/css"> .style1 { font-size: 13px; font-family: "黑体"; font-weight: normal; color: #0099FF; } </style> <div align="center"> <table width="260" border="1" bgcolor="#D8EFFA"> <form name="login" method="post" action="06.php" onSubmit="return checklogin()"> <tr align="center"> <td height="30" colspan="2"><span class="style1">管理系统登录</span></td> </tr> <tr> <td width="90" align="center" class="style1">管理员: </td> <td width="170" height="20" align="left" valign="middle"><input name="username" type="text" id="username" size="20"></td> </tr> <tr> <td align="center" class="style1">密码: </td> <td height="20" align="left" valign="middle"><input name="password" type="password" id="password" size="20"></td> </tr> <tr> <td align="center" class="style1">  ; </td> <td height="20" align="center"><input type="submit" name="Submit" value="登 录"></td> </tr> </form> </table> </div> |
该程序是一个管理员登录界面,首先初始化session,然后通过检测session变量是否已经注册来检测用户是否已经登录过,如果登录过,则无需再次登录,直接定向到其他页面。这里还使用了javascript来判断是否输入了用户名和密码。
验证登录的页面
06.php的代码如下:
代码如下 | 复制代码 |
<?php session_start () ; //初始session if (isset ($_SESSION['shili'])){ header ("Location:shili.php") ; //重新定向到其他页面 exit ; } //登录过的话立即结束 $shili_name=$_POST['username'] ; //获取参数 $password=$_POST['password'] ; //验证管理员名称和密码是否正确,这里采用直接验证,没有连接数据库 if ($shili_name=="mr" and $password=="mrsoft"){ session_register ("shili") ; //注册新的变量,保存当前会话的昵称 $shili = $shili_name ; echo "<font color=red>登录成功!</font>" ; header ("Location:shili.php") ; //登录成功重定向到管理页面 }else{ echo "<table width='100%' align=center><tr><td align=center>" ; echo "账号或密码错误,或者不是管理员账号<br>" ; echo "<font color=red>登录失败!</font><br><a href='http://wyl072.blog.163.com/blog/05.php'>请重新输入</a>"; echo "</td></tr></table>" ; } ?> |
该程序同样是先通过session变量检测用户是否已经登录,如果没有,则要对输入的用户名和密码进行验证,正确则注册session变量,输出登录成功!。如不正确,则提示登录失败。
这是一个简单的用户登录验证的程序,通过session变量阻止了那些没有登录而直接浏览的用户。如果想要对某个页面限制浏览的用户,可以使用同样的方式,只要把如下的代码放在该页面的开头即可:
代码如下 | 复制代码 |
<?php session_start () ; |
利用session_id实现共享登录
先,多服务器共享session问题,这个大家应该都能够理解的,当一个网站的用户量过大,就会使用服务器集群,例如专门有一个登录用的服务器。用户通过登录服务器登录之后,登录服务器保存了用户的登录信息session,而其他受访问的服务器,例如电影服务器没有这个session,那么我们就要通过一个session的唯一标识来共享这个session了——具体session的共享超出了本文的范围,请自行查阅资料。
第二个用途就是,验证同一用户的不同会话,这个比较难理解。这样说吧,一个用户并非通过浏览器来请求连接,而是通过socket或者其它方式来请求数据的时候,我们首先要对他进行用户登录验证,验证成功之后,就下发一个sessionid给他,然后他每次请求的时候就携带这个sessionid,我们通过这个sessionid来判断session是否已经存在,如果存在我们就认定用户已经登录……
对于第一个问题,我们可以把sessionid保存在数据库中得以实现,这个方法比较安全而且应用广泛,但是不是我们讨论的范围哦
首先验证的时候产生一个sessionid;
代码如下 | 复制代码 |
<?php |
客户端携带sessionid这个变量来请求数据
代码如下 | 复制代码 |
<?php |
好了不问题己得到了很好的解决有需要了解的朋友可以参考一下。
本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。php中json_decode()和json_encode()
1.json_decode()
json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
json_decode — 对 JSON 格式的字符串进行编码
说明
mixed json_decode ( string $json [, bool $assoc ] )
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
参数
json
待解码的 json string 格式的字符串。
assoc
当该参数为 TRUE 时,将返回 array 而非 object 。
返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.
范例
Example #1 json_decode() 的例子
代码如下 | 复制代码 |
<?php 上例将输出: object(stdClass)#1 (5) { array(5) {
结果为: Array ( [0] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) ) |
可以看出经过json_decode()编译出来的是对象,现在输出json_decode($data,true)试下
代码如下 | 复制代码 |
echo json_decode($data,true); 结果: Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) ) |
可以看出 json_decode($data,true)输出的一个关联数组,由此可知json_decode($data)输出的是对象,而json_decode("$arr",true)是把它强制生成PHP关联数组.
2.json_encode()
json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
json_encode — 对变量进行 JSON 编码
Report a bug 说明
string json_encode ( mixed $value [, int $options = 0 ] )
返回 value 值的 JSON 形式
Report a bug 参数
value
待编码的 value ,除了resource 类型之外,可以为任何数据类型
该函数只能接受 UTF-8 编码的数据
options
由以下常量组成的二进制掩码: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.
Report a bug 返回值
编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。
Report a bug 更新日志
版本 说明
5.4.0 options 参数增加常量: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE。
5.3.3 options 参数增加常量:JSON_NUMERIC_CHECK。
5.3.0 增加 options 参数.
Report a bug 范例
Example #1 A json_encode() 的例子
代码如下 | 复制代码 |
<?php echo json_encode($arr); 以上例程会输出: {"a":1,"b":2,"c":3,"d":4,"e":5} Example #2 json_encode() 函数中 options 参数的用法 <?php echo "Normal: ", json_encode($a), "n"; $b = array(); echo "Empty array output as array: ", json_encode($b), "n"; $c = array(array(1,2,3)); echo "Non-associative array output as array: ", json_encode($c), "n"; $d = array('foo' => 'bar', 'baz' => 'long'); echo "Associative array always output as object: ", json_encode($d), "n"; 以上例程会输出: Normal: ["<foo>","'bar'",""baz"","&blong&","u00e9"] Empty array output as array: [] Non-associative array output as array: [[1,2,3]] Associative array always output as object: {"foo":"bar","baz":"long"} |
Example #3 连续与非连续数组示例
代码如下 | 复制代码 |
<?php echo PHP_EOL."非连续%e;> |
该程序是一个管理员登录界面,首先初始化session,然后通过检测session变量是否已经注册来检测用户是否已经登录过,如果登录过,则无需再次登录,直接定向到其他页面。这里还使用了javascript来判断是否输入了用户名和密码。
验证登录的页面
06.php的代码如下:
代码如下 | 复制代码 |
<?php session_start () ; //初始session if (isset ($_SESSION['shili'])){ header ("Location:shili.php") ; //重新定向到其他页面 exit ; } //登录过的话立即结束 $shili_name=$_POST['username'] ; //获取参数 $password=$_POST['password'] ; //验证管理员名称和密码是否正确,这里采用直接验证,没有连接数据库 if ($shili_name=="mr" and $password=="mrsoft"){ session_register ("shili") ; //注册新的变量,保存当前会话的昵称 $shili = $shili_name ; echo "<font color=red>登录成功!</font>" ; header ("Location:shili.php") ; //登录成功重定向到管理页面 }else{ echo "<table width='100%' align=center><tr><td align=center>" ; echo "账号或密码错误,或者不是管理员账号<br>" ; echo "<font color=red>登录失败!</font><br><a href='http://wyl072.blog.163.com/blog/05.php'>请重新输入</a>"; echo "</td></tr></table>" ; } ?> |
该程序同样是先通过session变量检测用户是否已经登录,如果没有,则要对输入的用户名和密码进行验证,正确则注册session变量,输出登录成功!。如不正确,则提示登录失败。
这是一个简单的用户登录验证的程序,通过session变量阻止了那些没有登录而直接浏览的用户。如果想要对某个页面限制浏览的用户,可以使用同样的方式,只要把如下的代码放在该页面的开头即可:
代码如下 | 复制代码 |
<?php session_start () ; |
利用session_id实现共享登录
先,多服务器共享session问题,这个大家应该都能够理解的,当一个网站的用户量过大,就会使用服务器集群,例如专门有一个登录用的服务器。用户通过登录服务器登录之后,登录服务器保存了用户的登录信息session,而其他受访问的服务器,例如电影服务器没有这个session,那么我们就要通过一个session的唯一标识来共享这个session了——具体session的共享超出了本文的范围,请自行查阅资料。
第二个用途就是,验证同一用户的不同会话,这个比较难理解。这样说吧,一个用户并非通过浏览器来请求连接,而是通过socket或者其它方式来请求数据的时候,我们首先要对他进行用户登录验证,验证成功之后,就下发一个sessionid给他,然后他每次请求的时候就携带这个sessionid,我们通过这个sessionid来判断session是否已经存在,如果存在我们就认定用户已经登录……
对于第一个问题,我们可以把sessionid保存在数据库中得以实现,这个方法比较安全而且应用广泛,但是不是我们讨论的范围哦
首先验证的时候产生一个sessionid;
代码如下 | 复制代码 |
<?php |
客户端携带sessionid这个变量来请求数据
代码如下 | 复制代码 |
<?php |
好了不问题己得到了很好的解决有需要了解的朋友可以参考一下。
本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。php中json_decode()和json_encode()
1.json_decode()
json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
json_decode — 对 JSON 格式的字符串进行编码
说明
mixed json_decode ( string $json [, bool $assoc ] )
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
参数
json
待解码的 json string 格式的字符串。
assoc
当该参数为 TRUE 时,将返回 array 而非 object 。
返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.
范例
Example #1 json_decode() 的例子
代码如下 | 复制代码 |
<?php 上例将输出: object(stdClass)#1 (5) { array(5) {
结果为: Array ( [0] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => stdClass Object ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) ) |
可以看出经过json_decode()编译出来的是对象,现在输出json_decode($data,true)试下
代码如下 | 复制代码 |
echo json_decode($data,true); 结果: Array ( [0] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [1] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) [2] => Array ( [Name] => a1 [Number] => 123 [Contno] => 000 [QQNo] => ) ) |
可以看出 json_decode($data,true)输出的一个关联数组,由此可知json_decode($data)输出的是对象,而json_decode("$arr",true)是把它强制生成PHP关联数组.
2.json_encode()
json_encode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)
json_encode — 对变量进行 JSON 编码
Report a bug 说明
string json_encode ( mixed $value [, int $options = 0 ] )
返回 value 值的 JSON 形式
Report a bug 参数
value
待编码的 value ,除了resource 类型之外,可以为任何数据类型
该函数只能接受 UTF-8 编码的数据
options
由以下常量组成的二进制掩码: JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_UNESCAPED_UNICODE.
Report a bug 返回值
编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。
Report a bug 更新日志
版本 说明
5.4.0 options 参数增加常量: JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, 和 JSON_UNESCAPED_UNICODE。
5.3.3 options 参数增加常量:JSON_NUMERIC_CHECK。
5.3.0 增加 options 参数.
Report a bug 范例
Example #1 A json_encode() 的例子
代码如下 | 复制代码 |
<?php echo json_encode($arr); 以上例程会输出: {"a":1,"b":2,"c":3,"d":4,"e":5} Example #2 json_encode() 函数中 options 参数的用法 <?php 相关文章
|