Heim >Backend-Entwicklung >PHP-Tutorial >php中session和cookie实现自动登录_PHP教程

php中session和cookie实现自动登录_PHP教程

WBOY
WBOYOriginal
2016-07-13 10:36:451062Durchsuche

   session的使用:

  session_start();定义$_SESSION数组变量。

  session_start()使用前,不能有任何形式的输出,包括php中的输出和html代码。

  $_SESSION数组不可以使用数值下标,只可以使用字符串下标。

  php.ini中的session_save_path配置项决定了session的保存位置。

  默认情况下,session是保存在文件中。我们可以使用session_set_save_handler()函数来重写session机制。

  设置有效时间

 代码如下  
SESSION:
ini_set('session.gc_maxlifetime',24*3600);//session保存一天
session_start();
$_SESSION[‘web_name’]='网易';

  说明:好像默认是时间是:20-24分钟,但是关闭浏览器session就自动消失了!

  删除session:

  删除某个元素 unset($_SESSION[key]);

  删除所有session $_SESSION=array();

  删除保存session数据的文件 session_destroy();

  session_distroy()方法只是删除了服务器端的session文件,并不会释放内存中的$_SESSION变量,如果我们在session_distroy()后,立即var_dump($_SESSION),仍然可以看到session输出。因此如果想完全的释放session,必须配合使用$_SESSION=array()。

  cookie的使用:

  设置cookie:setcookie(变量名,变量值,生存时间(时间戳))。

  删除cookie:setcookie(变量名,值,time()-1)。原理:设置cookie的生存时间过期。

  读取cookie:$_COOKIE[变量名]。

  $path="/"; //设置cookie存放的路径;1.默认存放是本目录,只有本目录下才能访问,2.“/”表示存放在根目录,3.“/foo/”只有foo文件夹下面文件才能访问

 代码如下  


setcookie("cookiename","网易'", time()+intval(24*3600),$path); /* 有效期 1天 */

  注意:cookie存放的值只能是string类型的,但是要存放数值怎么解决呢!

  存储:

 代码如下  

$array=array('a','b');
//"serialize:"返回值是一个字符串。有的时候为了把一些数据转为字符串存起来,但是希望保持数据原来有结构和内容。就要用到这个函数。
$res=serialize($array);
setcookie("snsresult",$res,time()+intval(24*3600));

  读取:

 代码如下  

//恢复serialize对象

 $other = StripSlashes($_COOKIE['snsresult']);//必须执行这步
  $arr=unserialize($other);//先将加密cookie进行解码 www.111Cn.net

  注意:setcookie在代码中存取值时前面是不可以输出任何内容的,空行也不可以,不然cookie是没有值的。

  1、$_COOKIE只可以读取cookie的值,并不能对cookie进行设置。

  2、在使用setcookie之前,不能有任何类型的输出。

  3、在脚本第一次设置cookie后,是不能在当前脚本使用$_COOKIE获取到的。需刷新页面或者在其他脚本中获取。

  自动登录

 代码如下  

//检查用户是否登录


function checklogin(){  
     if(empty($_SESSION['user_info'])){    //检查一下session是不是为空  
     if(empty($_COOKIE['username']) || empty($_COOKIE['password'])){  //如果session为空,并且用户没有选择记录登录状  
     header("location:login.php?req_url=".$_SERVER['REQUEST_URI']);  //转到登录页面,记录请求的url,登录后跳转过去,用户体验好。  
}else{   //用户选择了记住登录状态  
     $user = getUserInfo($_COOKIE['username'],$_COOKIE['password']);   //去取用户的个人资料  
     if(empty($user)){    //用户名密码不对没到取到信息,www.111Cn.net 转到登录页面  
     header("location:login.php?req_url=".$_SERVER['REQUEST_URI']);  
     }else{  
     $_SESSION['user_info'] = $user;   //用户名和密码对了,把用户的个人资料放到session里面  
     }  
     }  
     }  
}


二,用户提交登录信息


username = trim($_POST['username']);  
$password = md5(trim($_POST['password']));  
$validatecode = $_POST['validateCode'];  
$ref_url = $_GET['req_url'];  
$remember = $_POST['remember'];  
  
$err_msg = '';  
if($validatecode!=$_SESSION['checksum']){  
$err_msg = "验证码不正确";  
}elseif($username=='' || $password==''){  
$err_msg = "用户名和密码都不能为空";  
}else{  
$row = getUserInfo($username,$password);  
  
if(empty($row)){  
$err_msg = "用户名和密码都不正确";  
}else{  
$_SESSION['user_info'] = $row;  
if(!empty($remember)){     //如果用户选择了,记录登录状态就把用户名和加了密的密码放到cookie里面  
setcookie("username", $username, time()+3600*24*365);  
setcookie("password", $password, time()+3600*24*365);  
}  
if(strpos($ref_url,"login.php") === false){  
header("location:".$ref_url);  
}else{  
header("location:main_user.php");  
}  
}  
}


三,当用户点退出时,清出记录登录状态


//退出登录


function logout(){  
unset($_SESSION['user_info']);  
if(!empty($_COOKIE['username']) || !empty($_COOKIE['password'])){  
setcookie("username", null, time()-3600*24*365);  
setcookie("password", null, time()-3600*24*365);  
}  
}

  两者的联系与区别:

  联系:

  两者都被成为会话技术,用于解决http的无状态性。

  sessionID是保存在cookie中的。默认情况下,session是依赖cookie的,如果浏览器端完全禁用了cookie,那么session也就不能用了。但是我们有其他的方法可以让session继续有用。比如url重写,将sessionID放在url中;给表单增加隐藏域,讲sessionID存放在隐藏域中,发送至浏览器。

  区别:

  cookie保存早浏览器端,每次访问服务器的时候,都会讲cookie带过去,保证让服务器知道两次请求来自于同一个客户端。安全性较低。

  session保存在服务器,每次请求都会通过cookie带来的sessionID去服务器匹配。安全性较高。

  session的有效期从session_start()开始,到浏览器关闭结束。

  cookie可以设定有效期。默认为浏览器关闭cookie就失效,sessionID丢失,即使服务器端的session文件还在,也不会被找到。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/737680.htmlTechArticlesession的使用: session_start();定义$_SESSION数组变量。 session_start()使用前,不能有任何形式的输出,包括php中的输出和html代码。 $_SESSION数组不...
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn