会话维持
什么是会话?一位用户从访问网站的第一个网页开始直到离开网站,就可以称为一个会话。
Cookie
存储在浏览器客户端,当用户访问网站时,Cookie随着请求一起发给服务器。Cookie一般用于在客户端存储数据以及追踪识别用户。
- 创建Cookie
setcookie($name,$value,$expire=0[,$path][,$domain])
- $name:Cookie变量名
- $value:Cookie变量值
- $expire:Cookie过期时间,通常用time()+秒数来设置过期时间
- $path:设置Cookie在服务器的哪些路径可以用,默认只对当前目录有效
- $domain:设置域
- 读取Cookie内容
在PHP中,全局数组$_Cookie中保存了Cookie的变量
例如:echo $Cookie['username']
- 删除Cookie
一般有两种删除方法,一是通过设置Cookie的过期时间为当前时间-1秒,二是用户手动在浏览器删除Cookie
测试代码:
<?php
if($_COOKIE['isloged']=="True" and $_COOKIE['username']<>null){//首先判断有没有已经成功登陆的标记
echo"<h1>欢迎</h1>";
print_r($_COOKIE);
exit;//如果已经登陆过,那么结束脚本,不再执行下面代码
}
if($_COOKIE['username']==0){//判断是否有用户名的值
echo"未登陆";
}
?>
<!-- 登陆部分, -->
<title>表单登陆</title>
<meta charset="utf-8">
<table border=0>
<tr >
<td align=right>
请输入用户名:<br>
请输入密码:<br>
性别:<br>
出生日期:<br>
爱好:<br>
简介:<br><br><br><br>
</td>
<td align=left>
<!-- action是当前的网页,传输是POST方式 -->
<form action="index.php" method="POST">
<input type="text" name = "username"><br>
<input type="password" name = "pwd" value="123456" ><br>
<input type="radio" name="sex" value="female">女
<input type="radio" name="sex" value="male" checked>男
<br>
<select name="y">
<option value="1970">1970</option>
</select>年
<select name="m">
<option value="1">1</option>
</select>月
<select name="d">
<option value="19">19</option>
</select>日
<br>
<input type="checkbox" name="book" value="读书">读书
<input type="checkbox" name="climb" value="登山">登山
<input type="checkbox" name="music" value="音乐">音乐
<br>
<textarea name="brief" >husiudh</textarea>
<br>
<input type="submit">
<input type="reset">
</form>
</td>
</table>
<?php
if(count($_POST)==0) exit;//判断有没有表单提交信息,如果发现POST没有内容,那么退出脚本。
echo "<hr>你输入的数据如下<br>";
print_r( $_POST);
print_r($_COOKIE);
echo"<hr>";
if($_POST['pwd']<>"123456" ){//判断密码是不是正确的
echo"用户名或者密码错误";
}else {//如果密码正确,那么设置Cookie,并且跳转页面到当前页面(在这个例子相当于刷新的功能)
setcookie('username',$_POST['username'],time()+3660);
setcookie('isloged','True',time()+3600);
echo '<script>window.location = ".";</script>';
}
?>
Session
存储在服务器,PHP为每一个会话创建一个唯一的SessionID,SessionID可以在用户访问的页面之间传递,以识别会话,保存在一个全局数组$_SESSION中。当用户离开网站时,Session自动销毁。
- 设置Session
- session.save_path="/php/session":PHP使用文件来保存Session,该设置指定Session的保存路径。
- session.use_cookie=1:设置是否使用Cookie来传递SessionID
- session.use_only_cookie=1:设置是否只使用Cookie来传递SessionID,而不使用URL传递
- session.auto_start=1:设置用户访问网站时自动启用session,如果为0,则需要在用户访问的每一个网页中调用 session_start()函数来启动Session。
测试代码
<?php
session_start();//开启session
if($_SESSION['isloged']=="True" and $_SESSION['username']<>null){//首先判断有没有已经成功登陆的标记
echo"<h1>欢迎</h1>";
print_r($_SESSION);
exit;//如果已经登陆过,那么结束脚本,不再执行下面代码
}
if($_SESSION['username']==0){//判断是否有用户名的值
echo"未登陆";
}
?>
<!-- 登陆部分, -->
<title>表单登陆</title>
<meta charset="utf-8">
<table border=0>
<tr >
<td align=right>
请输入用户名:<br>
请输入密码:<br>
性别:<br>
出生日期:<br>
爱好:<br>
简介:<br><br><br><br>
</td>
<td align=left>
<!-- action是当前的网页,传输是POST方式 -->
<form action="index.php" method="POST">
<input type="text" name = "username"><br>
<input type="password" name = "pwd" value="123456" ><br>
<input type="radio" name="sex" value="female">女
<input type="radio" name="sex" value="male" checked>男
<br>
<select name="y">
<option value="1970">1970</option>
</select>年
<select name="m">
<option value="1">1</option>
</select>月
<select name="d">
<option value="19">19</option>
</select>日
<br>
<input type="checkbox" name="book" value="读书">读书
<input type="checkbox" name="climb" value="登山">登山
<input type="checkbox" name="music" value="音乐">音乐
<br>
<textarea name="brief" >husiudh</textarea>
<br>
<input type="submit">
<input type="reset">
</form>
</td>
</table>
<?php
if(count($_POST)==0) exit;//判断有没有表单提交信息
echo "<hr>你输入的数据如下<br>";
print_r( $_POST);
print_r($_SESSION);
echo"<hr>";
if($_POST['pwd']<>"123456" ){//判断密码是不是正确的
echo"用户名或者密码错误";
}else {//如果密码正确,那么设置SE$_SESSION,并且跳转页面到当前页面(在这个例子相当于刷新的功能)
$_SESSION['username']=$_POST['username'];
$_SESSION['isloged']="True";
echo '<script>window.location = ".";</script>';
}
?>