php session 处理类

 更新时间:2016年11月25日 17:32  点击:1311

 php教程 session 变量用于存储有关用户会话的信息,或更改用户会话的设置。session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。
php session 变量
当您运行一个应用程序时,您会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 http 地址不能维持状态。

通过在服务器上存储用户信息以便随后使用,php session 解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久储存信息,可以把数据存储在数据库教程中。

session 的工作机制是:为每个访问者创建一个唯一的 id (uid),并基于这个 uid 来存储变量。uid 存储在 cookie 中,亦或通过 url 进行传导。

*/

class my_session
{
 function my_session()
 {
  // destroy sessions started with session.auto_start
  if( session_id() )
  {
   session_unset();
   session_destroy();
  }
 
  session_start();
 }

 function set($name, $value)
 {
  $_session[$name] = $value;
 }

 function get($name)
 {
  if(isset($_session[$name]))
   return $_session[$name];
  else
   return false;
 }

 function del($name)
 {
  unset($_session[$name]);
 }

 function destroy()
 {
  $_session = array();
  session_destroy();
 }
 
}

<!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>insert title here</title>
<script type="text/网页特效">
function checkusername(input){
 var name = input.value;
 var url = 'checkusername.php教程?username=' + name;

 var xmlhttp = getxmlhttpobject();
 xmlhttp.onreadystatechange = function(){
  if (xmlhttp.readystate==4){
   $$("pmt_username").innerhtml = xmlhttp.responsetext;
  }
 }
 xmlhttp.open("get",url,true);
 xmlhttp.send(null);
}
function getxmlhttpobject(){
 var xmlhttp=null;
 try{
  // firefox, opera 8.0+, safari
  xmlhttp=new xmlhttprequest();
 }catch (e){
  // internet explorer
  try{
   xmlhttp=new activexobject("msxml2.xmlhttp");
  }catch (e){
   xmlhttp=new activexobject("microsoft.xmlhttp");
  }
 }
 return xmlhttp;
}
function checkform(form){
 try{
  assertnonempty(form.username);
  assertnonempty(form.pwd);
//  assertint(form.mobile);
 } catch(e){
  return false;
 }
 return true;
}
function assertnonempty(obj){
 if(obj.value == ''){
  var tds = gettdelems(obj);
  var text = tds[0].innerhtml;
  
  tds[1].innerhtml = text.slice(0,-1) + '不能为空';
  obj.focus();
  obj.select();
  
  throw new exception();
 }
}
function assertint(obj){
 var v = obj.value;
 if(/d{11}/.test(v)){
  alert('ok');
 } else {
  alert('error');
 }
 if(number(v) != v){
  var tds = gettdelems(obj);
  var text = tds[0].innerhtml;
  
  tds[1].innerhtml = text.slice(0,-1) + '应该是数值';
  
  obj.focus();
  obj.select();
  throw new exception();
 }
}
window.onload = function(){
// alert($$('username').type);
// $$('abc').onkeydown = mobilekeydown;
}
function gettdelems(obj){
 var tr = obj.parentnode.parentnode;
 var tds = tr.getelementsbytagname('td');
 return [tds[0],tds[2]];
}
function mobilekeydown(e){
 e = e || event;
 return e.keycode >47 && e.keycode < 59;
}

function $$(id){
 return document.getelementbyid(id);
}
function checkcode(input){
 var name = input.value;
 var url = 'checkcode.php?code=' + name;

 var xmlhttp = getxmlhttpobject();
 xmlhttp.onreadystatechange = function(){
  if (xmlhttp.readystate==4){
   $$("code").innerhtml = xmlhttp.responsetext;
  }
 }
 xmlhttp.open("get",url,true);
 xmlhttp.send(null);
}
</script>
</head>
<body>
<form method="post" action='register.php' enctype="multipart/form-data" onsubmit='return checkform(this)'>
 <table>
  <tr>
   <td>用户名:</td>
   <td><input type='text' name='username' onblur='checkusername(this)'></td>
   <td id='pmt_username'></td>
  </tr>
  <tr>
   <td>密码:</td>
   <td><input type='password' name='pwd'></td>
   <td id='pmt_pwd'></td>
  </tr>
  <tr>
   <td>重复密码:</td>
   <td><input type='password' name='pwd2'></td>
   <td></td>
  </tr>
  <tr>
   <td>姓名:</td>
   <td><input type='text' name='name'></td>
   <td></td>
  </tr>
  <tr>
   <td>性别:</td>
   <td>
    <input id='sex_m' checked type='radio' name='sex' value='男'><label for='sex_m'> 男 </label>
    <label><input type='radio' name='sex' value='女'>女</label>
   </td>
   <td></td>
  </tr>
  <tr>
   <td>年龄:</td>
   <td><input type='text' name='age'></td>
   <td id='pmt_age'></td>
  </tr>
  <tr>
   <td>手机:</td>
   <td><input type='text' name='mobile'></td>
   <td></td>
  </tr>
  <tr>
   <td>通信地址:</td>
   <td><input type='text' name='address'></td>
   <td></td>
  </tr>
  <tr>
   <td>邮件地址:</td>
   <td><input type='text' name='email'></td>
   <td></td>
  </tr>
  <tr>
   <td>用户照片:</td>
   <td><input type='file' name='photo'></td>
   <td></td>
  </tr>
  <tr>
   <td>出生日期:</td>
   <td><input type='text' name='birthday'></td>
   <td></td>
  </tr>
  <tr>
   <td>验证码:</td>
   <td><input type='text' name='verifycode' onblur='checkcode(this)'><img src='verifycode.php'></td>
   <td id='code'></td>
  </tr>
  <tr>
   <td colspan='3'><input type='submit' value='注册'> <input type='reset' value='重置'></td>
  </tr>
 </table>
</form>

</body>
</html>

checkusername.php文件

<?php
 $username = $_get['username'];
 mysql教程_connect('127.0.0.1', 'root', '') or die('could not connect: ' . mysql_error());
 mysql_select_db('test');
 
 //拼接sql语句时必须将用户输入的值做处理,替换特殊字符,用引号包含
 $username = htmlentities($username,ent_quotes);
 $sql = "select count(*) from user where username ='{$username}'";
 
 $result = mysql_query($sql);
 if($row = mysql_fetch_array($result, mysql_num)){
  $cnt = $row[0];
  if($cnt == 0) {
   echo '用户名未被使用';
  } else {
   echo '用户名已被使用,请改换用户名';
  }
 }
?>

verifycode.php验证码程序


<?php
session_start();

$rnd = array_merge(range(0,9),range('a','z'));
shuffle($rnd);

$code = implode('',$rnd);
$code = substr($code,0,4);

$_session['verifycode'] = $code;

header("content-type: image/png");
$im = @imagecreate(50, 25) or die("cannot initialize new gd image stream");
$background_color = imagecolorallocate($im, 255, 255, 255);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 5, 5, 5,  $code, $text_color);
imagepng($im);
imagedestroy($im);


?>
checkcode.php 检测用户输入的验证码是否一致
<?php
 session_start();
 
 $code = $_get['code'];
 
 echo strtoupper($code) == $_session['verifycode'] ? '验证码正确' : '验证码错误';
?>

register.php注册处理程序

<?php
session_start();

$filename = '';
if(isset($_files['photo'])){
 $uploaddir = dirname(__file__) . directory_separator . 'upload';
 $originfilename = $_files['photo']['name'];
 $extname = strtolower(substr($originfilename,strrpos($originfilename,'.')+1));
 
 $filename = time() . '.' . $extname;
 
 $validext = array('jpg','jpeg','gif','png');
 if(!in_array($extname,$validext)){
  errormsg("错误的文件类型");
 }
 
 if($_files['photo']['size'] > 100*1024){
  errormsg("文件太大,超过了100k");
 }
 $uploadfile = $uploaddir . directory_separator . $filename;
 
 if(!move_uploaded_file($_files['photo']['tmp_name'], $uploadfile)) {
  errormsg("照片上传失败");
 }
}

$code = $_post['verifycode'];
if($code != $_session['verifycode']){
 errormsg("验证码输入不正确");
}

mysql_connect('127.0.0.1', 'root', '');
mysql_select_db('test');
mysql_query('set names utf8');

$username = addslashes($_post['username']);
$pwd = md5($_post['pwd']);
$name = addslashes($_post['name']);
$sex = addslashes($_post['sex']);
$age = intval($_post['age']);
$mobile = addslashes($_post['mobile']);
$address = addslashes($_post['address']);
$email = addslashes($_post['email']);
$photo = $filename;
$birthday = addslashes($_post['birthday']);

$sql = "insert into user(username,pwd,name,sex,age,mobile,address,email,photo,birthday)
 values('$username','$pwd','$name','$sex',$age,'$mobile','$address','$email','$photo','$birthday')";

if(!mysql_query($sql)){
 errormsg('数据库教程写入不成功!');
}

$sql = 'select * from user';
$res = mysql_query($sql);
echo '
 <table>
  <tr>
   <td>用户名</td>
   <td>姓名</td>
   <td>性别</td>
   <td>年龄</td>
   <td>手机</td>
   <td>通信地址</td>
   <td>邮件地址</td>
   <td>出生日期</td>
<!--   <td>照片</td> -->
  </tr>
';
while($row = mysql_fetch_assoc($res)){
 $photo = $row['photo'] ? "<img src='./upload/{$row['photo']}'>" : '';
 echo "
  <tr>
   <td>{$row['username']}</td>
   <td>{$row['name']}</td>
   <td>{$row['sex']}</td>
   <td>{$row['age']}</td>
   <td>{$row['mobile']}</td>
   <td>{$row['address']}</td>
   <td>{$row['email']}</td>
   <td>{$row['birthday']}</td>
<!--   <td>$photo</td> -->
  </tr>
 ";
 
}

echo '</table>';


function errormsg($str){
 die('<script type="text/javascript">alert("' . $str . '");</script>');
}


?>

最简单数据库结构

drop database if exists test;
create database test character set utf8 collate utf8_general_ci;

use test;

create table user(
 username char(10) primary key
 ,pwd char(32) not null
 ,name char(10) not null
 ,sex char(1) not null
 ,mobile char(11)
 ,age smallint
 ,address varchar(50)
 ,email varchar(30)
 ,photo varchar(20)
 ,birthday date
);

http://down.111cn.net/down/code/php/qitayuanma/2010/1220/22331.html

语法
header(string,replace,http_response_code)参数 描述
string 必需。规定要发送的报头字符串。
replace 可选。指示该报头是否替换之前的报头,或添加第二个报头。

默认是 true(替换)。false(允许相同类型的多个报头)。
 
http_response_code 可选。把 http 响应代码强制为指定的值。(php 4 以及更高版本可用)


header() 函数向客户端发送原始的 http 报头。

认识到一点很重要,即必须在任何实际的输出被发送之前调用 header() 函数(在 php 4 以及更高的版本中,您可以使用输出缓存来解决此问题):


*/
header("x-sample-test:foo");       //发送http标头
header('content-type:text/plain');      //发送http标头
var_dump(headers_list());        //返回已发送的标头列表

if(!headers_sent())          //如果标头没有发送
{
  header('location:http://www.example.com/');     //发送标头
  exit;            //结束php代码
}
if(!headers_sent($filename,$linenum))      //如果没有输出指定文件
{
  header('location:http://www.example.com/');     //发送标头
  exit;            //结束php代码
}
else             //如果已经输出到指定文件
{
  echo "headers already sent in $filename on line $linenumn".
  "cannot redirect,for now please click this <a".
  "href="http://www.example.com">link</a>insteadn";   //输出提示信息
  exit;            //结束php代码
}
/*
注释:从 php 4.4 之后,该函数防止一次发送多个报头。这是对头部注入攻击的保护措施。

*/

cookie 是由服务器发送到浏览器的变量。cookie 通常是服务器嵌入到用户计算机中的小文本文件。每当计算机通过浏览器请求一个页面,就会发送这个 cookie。

cookie 的名称指定为相同名称的变量。例如,如果被发送的 cookie 名为 "name",会自动创建名为 $user 的变量,包含 cookie 的值。

必须在任何其他输出发送前对 cookie 进行赋值。

如果成功,则该函数返回 true,否则返回 false。

语法
setcookie(name,value,expire,path,domain,secure)

*/
$cookieinfo=session_get_cookie_params();        //获取cookie信息
if((empty($cookieinfo['domain']))&&(empty($cookieinfo['secure'])))    //检查结果是否为空
{
  setcookie(session_name(),'',time()-3600,$cookieinfo['path']);     //设置cookie
}
elseif(empty($cookieinfo['secure']))          //检查选项是否为空
{
  setcookie(session_name(),'',time()-3600,$cookieinfo['path'],$cookieinfo['domain']); //设置cookie
}
else
{
  setcookie(session_name(),'',time()-3600,$cookieinfo['path'],$cookieinfo['domain'],$cookieinfo['secure']);                //设置cookie
}
//session_destroy();             //注销session
print_r($_session);
print_r($_cookie);

//利用session_set_cookie_params可以设置生存期及路径

session_set_cookie_params(0,'/yourpath/');      //设置cookie的生存期及路径


/*

注释:可以通过 $http_cookie_vars["user"] 或 $_cookie["user"] 来访问名为 "user" 的 cookie 的值。

注释:在发送 cookie 时,cookie 的值会自动进行 url 编码。接收时会进行 url 解码。如果你不需要这样,可以使用 setrawcookie() 代替。

*/

session_start(), session_register(),session_unregister(),
session_is_registered(),session_destroy函数.
session_start():启用session机制,在需要用到session的程序文件的最开始调用它.
session_register():注册session变量
session_unregister(): 删除session变量(一个一个删除)
session_is_registered(): 判断session变量是否注册
session_distroy(): 销毁所有session变量(所有session变量销毁)

初始化session
实例1
*/
session_start();
//删除所有的session变量值
$_session=array();
if(isset($_cookie[session_name()]))
{
  setcookie(session_name(),'',time()-42000,'/');
}
//注销所有的session
session_destroy();

/*
实例2
*/

session_start();             //初始化session
$a=5;              //定义变量
session_register('a');            //注册session
session_decode("<session that doesn't have a as a session variable>");  //解密字符串
print (session_is_registered('a')?$_session[a]:'not registered' );     //判断变量是否注册


/*
实例3
*/

/*初始化session*/
session_start();
$_session['login_ok']=true;        //定义session值
$_session['nome']='sica';        //定义session值
$_session['inteiro']=34;         //定义session值
$result=session_encode();        //对session值加密
echo $result;           //输出结果
session_destroy();          //注销所有session值

/*
实例4
*/

session_start();         //初始化session
$_session['name']="yoursession";     //注册一个session变量
if(!isset($_session['initiated']))     //如果某个值没有被设定
{
  session_regenerate_id();      //获取当前的session id
  $_session['initiated']=true;      //设定值为真
}
session_destroy();        //注销session

//实例5

session_start();         //初始化session
$_session['name']="yoursession";     //注册一个session变量
if(session_is_registered(name))     //进行判断
{
  echo "指定的变量已经被注册为session<br>";  //输出内容
}
else
{
  echo "指定的变量没有被注册为session<br>";  //输出相应结果
}
session_destroy();        //注销session
?>

[!--infotagslink--]

相关文章

  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • Windows批量搜索并复制/剪切文件的批处理程序实例

    这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
  • BAT批处理判断服务是否正常运行的方法(批处理命令综合应用)

    批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。这篇文章主要介绍了BAT批处理判断服务是否正常运行(批处理命令综合应用),需要的朋友可以参考下...2020-06-30
  • PHP file_get_contents设置超时处理方法

    file_get_contents的超时处理话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。今天说的这篇是讲超时的,确实在...2013-10-04
  • PHP分布式框架如何使用Memcache同步SESSION教程

    本教程主要讲解PHP项目如何用实现memcache分布式,配置使用memcache存储session数据,以及memcache的SESSION数据如何同步。 至于Memcache的安装配置,我们就不讲了,以前...2016-11-25
  • C#多线程中的异常处理操作示例

    这篇文章主要介绍了C#多线程中的异常处理操作,涉及C#多线程及异常的捕获、处理等相关操作技巧,需要的朋友可以参考下...2020-06-25
  • postgresql 中的时间处理小技巧(推荐)

    这篇文章主要介绍了postgresql 中的时间处理小技巧(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
  • 详解C#中的session用法

    这篇文章主要介绍了C#中的session用法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Python3使用Selenium获取session和token方法详解

    这篇文章主要介绍了Python3使用Selenium获取session和token方法详解,需要的朋友可以参考下...2021-02-17
  • Python同时处理多个异常的方法

    这篇文章主要介绍了Python同时处理多个异常的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-29
  • C#异常处理中try和catch语句及finally语句的用法示例

    这篇文章主要介绍了C#异常处理中try和catch语句及finally语句的用法示例,finally语句的使用涉及到了C#的垃圾回收特性,需要的朋友可以参考下...2020-06-25
  • python用moviepy对视频进行简单的处理

    这篇文章主要介绍了python如何用moviepy对视频进行简单的处理,帮助大家更好的利用python处理视频,感兴趣的朋友可以了解下...2021-03-11
  • C#异常处理详解

    这篇文章介绍了C#异常处理,有需要的朋友可以参考一下...2020-06-25
  • 编程新手必须掌握的:session与cookie的区别

    session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章和资料的参阅,及作者个人的应用体会,对这两个概念做一个简单的阐述...2013-09-11
  • PHP中如何使用session实现保存用户登录信息

    session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。使用session保存页面登录信息1、数据库连接...2015-10-21
  • Vue使用axios引起的后台session不同操作

    这篇文章主要介绍了Vue使用axios引起的后台session不同操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-14
  • sql server日志处理不当造成的隐患详解

    这篇文章主要给大家介绍了关于sql server日志处理不当造成的隐患的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用sql server具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-11
  • php中session常见问题分析

    PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 引用 代...2016-11-25
  • Spring MVC 处理一个请求的流程

    Spring MVC是Spring系列框架中使用频率最高的部分。不管是Spring Boot还是传统的Spring项目,只要是Web项目都会使用到Spring MVC部分。因此程序员一定要熟练掌握MVC部分。本篇博客简要分析Spring MVC处理一个请求的流程。...2021-02-06
  • go语言中的Carbon库时间处理技巧

    这篇文章主要介绍了go语言中的Carbon库时间处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-05