当一个网站的用户量非常大时,就会使用服务器集群,此时就会涉及session共享的问题。
另外,验证同一用户的不同会话,也是个问题。一个用户并非通过浏览器来请求连接,而是通过socket或者其它方式来请求数据的时候,我们首先要对他进行用户登录验证,验证成功之后,就下发一个sessionid给他,然后他每次请求的时候就携带这个sessionid,我们通过这个sessionid来判断session是否已经存在,如果存在我们就认定用户已经登录。
对于第一个问题,可以把sessionid保存在数据库中得以实现。
第二个问题,就比较简单了。
首先,验证时产生一个sessionid;
Session_start();
$sessionId = session_id();//得到sessionid
//将session下发给客户端
.........
?>
客户端携带sessionid这个变量来请求数据:
Session_id(‘$sessionid');//注意这个时候session_id()这个函数是带有参数的
Session_start();//这个函数必须在session_id()之后
?>
此时session已经是登录验证时的session了。
注意:
在sessionServer.php中如果使用thinkphp等其他自动启动session_start();函数的框架时,首先一定要调用session_destory()函数以清空session。
这个有时容易忽略,搞的自己半天找不到问题在哪里!!!
为大家介绍php session进行登录验证的例子,通过这个例子,可以更好的掌握php中session的用法。
有需要的朋友可参考下。
1、html登录页
<head>
<title>session 登录验证 - www.</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<form name="form1" method="post" action="/blog_article/login.html">
<table width="300" border="0" align="center" cellpadding="2" cellspacing="2">
<tr>
<td width="150"><div align="right">用户名:</div></td>
<td width="150"><input type="text" name="username"></td>
</tr>
<tr>
<td><div align="right">密码:</div></td>
<td><input type="password" name="passcode"></td>
</tr>
<tr>
<td><div align="right">Cookie保存时间:</div></td>
<td><select name="cookie" id="cookie">
<option value="0" selected>浏览器进程</option>
<option value="1">保存1天</option>
<option value="2">保存30天</option>
<option value="3">保存365天</option>
</select></td>
</tr>
</table>
<p align="center">
<input type="submit" name="Submit" value="Submit">
<input type="reset" name="Reset" value="Reset">
</p>
</form>
</body>
</html>
2、php程序页
@mysql_connect()("localhost", "root","1981427") //选择数据库之前需要先连接数据库服务器
or die("数据库服务器连接失败");
@mysql_select_db("test") //选择数据库mydb
or die("数据库不存在或不可用");
//获取用户输入
$username = $_POST['username'];
$passcode = $_POST['passcode'];
//执行SQL语句获得Session的值
$query = @mysql_query()("select username, userflag from users "
."where username = '$username' and passcode = '$passcode'")
or die("SQL语句执行失败");
//判断用户是否存在,密码是否正确
if($row = mysql_fetch_array($query))
{
session_start(); //标志Session的开始
//判断用户的权限信息是否有效,如果为1或0则说明有效
if($row['userflag'] == 1 or $row['userflag'] == 0)
{
$_SESSION['username'] = $row['username'];
$_SESSION['userflag'] = $row['userflag'];
echo "<a href="/blog_article/main.html" href="/blog_article/main.html">欢迎登录,点击此处进入欢迎界面</a>";
}
else //如果权限信息无效输出错误信息
{
echo "用户权限信息不正确";
}
}
else //如果用户名和密码不正确,则输出错误
{
echo "用户名或密码错误";
}
?>
3、注销登录页
unset($_SESSION['username']);
unset($_SESSION['passcode']);
unset($_SESSION['userflag']);
echo "注销成功";
?>
4、session验证页
session_start();
if(isset()($_SESSION['username']))
{
@mysql_connect("localhost", "root","1981427") //选择数据库之前需要先连接数据库服务器
or die("数据库服务器连接失败");
@mysql_select_db("test") //选择数据库mydb
or die("数据库不存在或不可用");
//获取Session
$username = $_SESSION['username'];
//执行SQL语句获得userflag的值
$query = @mysql_query("select userflag from users "
."where username = '$username'")
or die("SQL语句执行失败");
$row = mysql_fetch_array($query);
//判断当前数据库中的权限信息与Session中的信息比较,如果不同则更新Session的信息
if($row['userflag'] != $_SESSION['userflag'])
{
$_SESSION['userflag'] = $row['userflag'];
}
//根据Session的值输出不同的欢迎信息
if($_SESSION['userflag'] == 1)
echo "欢迎管理员".$_SESSION['username']."登录系统";
if($_SESSION['userflag'] == 0)
echo "欢迎用户".$_SESSION['username']."登录系统";
echo "<a href="/blog_article/logout.html" href="/blog_article/logout.html">注销</a>";
}
else
{
echo "您没有权限访问本页面";
}
?>
因为在结果输出至浏览器之前,php脚本已经在服务器端执行,即被nginx或apache、iis等解释执行过了,返回的只是解析后的内容而已。
那么,说到源码,我们就先来看下php在编码时用到的一些最基础的语法。
首先,php程序以<?php开始,以?>结束。php脚本程序可以放在文档中的任何位置,确切地说是<body>与</body>之间的任何位置。
在支持简写的服务器上,可以将开始与结束脚本块,写成这样:<? 和 ?>
出于养成良好编程习惯与兼容性的考虑,建议初学的朋友,一直都使用<?php的方式。
php程序或脚本,往往是与html标签融合在一起的,即便以后大家掌握了面向对象的编程,甚或掌握了mvc架构以后,php代码与html标签在一块的情况也是难以避免的。
来看一个简单的例子吧。
例1:
说明:php中每行代码均以分号结束。
在上面的代码中,我们用到了echo,它是php用来输出文本的指令,另外还有一个输出指令是print。
最后,我们看下php中的注释。
编写简洁、清晰、易懂的注释,是一个优秀程序员,要养成的良好习惯。
php中的注释也分为单行与多行注释,其中单选注释用//来表示,后面跟说明文字即可;多行注释与js中类似,用/* 注释说明 */来完成。
来看一个具体的例子。
例2:
今天的教程,就讲到这里,请大家继续关注由推出的php入门系列教程。
原创文章,未经授权,禁止转载。