PHP Cookie和Session

cookie

cookle常用来识别用户,可以理解为浏览器留下的一种文件,cookie可以分为会话cookie和硬盘cookie两种,会话cookie生命周期短,浏览器关闭即销毁,硬盘cookie生命周期由开发者设定,可长可短

1.创建cookie

PHP创建cookie使用函数setcookie(name,value,expire,path,domain,secure);

参数:

name:设定cookie的名称
value:cookie的值
expire:cookie的有效时长,如果不设置则为会话cookie
path:规定 cookie 的服务器路径
domain:规定 cookie 的域名
secure:规定是否只能通过HTTPS传输cookie,默认f

2.读取cookie

使用$_cookie[]

3.更新cookie

同样使用setcookie();

4.删除cookie

把cookie的有效时长设置为负值即可
需要注意:更新和删除cookie时,path,domain值必须与之前的一致

5.使用cookie实现登录

思路:

1.最终目标

:将用户输入数据与数据库中数据做比较,如果对比成功,跳转到主页,如果用户直接访问主页,弹窗阻止,但如果用户勾选自动登录复选框,则第一次登录成功后,在一段时间内允许直接访问主页。

2.实现思路:

1.1 首先如果用户勾选复选框,登陆时产生一个包含md5加密后的用户名密码的硬盘cookie,反之产生一个同样的内存cookie,主页调用数据库中的用户名,密码,用同样的加密方法加密一个密文,与cookie中的value作比较,相同则允许进入,为了方便从数据库中找到相关用户,可在登录cookie的密文值后面加一个明文id,在主页拆分即可。

登录前端的html不写了

<?phpheader("Content-type: text/html; charset=utf-8");
$usename=$_POST['usename']; //接受用户名
$passname=$_POST['pass'];//接受密码
$autologin=$_POST['check'];//接受是否自动登录
echo $autologin;
//接入数据库
$host = '127.0.0.1';
$user = 'root';
$pass = 'root';
$port=3306;
$link=@mysqli_connect("$host","$user","$pass","t2","3306");
@mysqli_set_charset($link,"utf8");
mysqli_select_db($link,'yonghu');//选择数据表
$sql="select id,username,password from yonghu WHERE username='{$usename}'&&password='{$passname}'";
$result=mysqli_query($link,$sql);
if(mysqli_num_rows($result)==1)
{//如果用户选择自动登录,则cookle类型设置为硬盘cookleif($autologin==1){$row=mysqli_fetch_assoc($result);setcookie('usename',$usename,strtotime("+1 hours"));//加密操作$son="zeianquan";$key=md5($usename.$passname.$son).":".$row['id'];setcookie('key',$key,strtotime("+1 hours"));}//否则,将cookle设置为会话cookleelse{setcookie('$usename',$usename);}exit("<script>alert('登录成功!');location.href='gerenjianjie.php';</script>");
}
else
{exit('用户名或密码错误.<a href="Untitled-2.php">重新注册</a>');
}
?>
<?php
header("Content-type: text/html; charset=utf-8");
if(!isset($_COOKIE['usename']))
{exit("<script>alert('请首先登录1!');location.href='dengluhouduan.php';</script>");
}
if(isset($_COOKIE['key'])) {$key = $_COOKIE['key'];
//找到cookle中的用户id ,与数据库中做对比,如果有,判断key是否正确,否则返回登录$resarr = explode(":", $key);$useid = end($resarr);
//接入数据库$host = '127.0.0.1';$user = 'root';$pass = 'root';$port = 3306;$link = @mysqli_connect("$host", "$user", "$pass", "t2", "3306");@mysqli_set_charset($link, "utf8");mysqli_select_db($link, 'yonghu');//选择数据表$sql = "select * from yonghu WHERE id=$useid";$result = mysqli_query($link, $sql);
//用户id存在,做进一步校验if (mysqli_num_rows($result) == 1) {
//校验思路:首先从数据库获取用户名,密码,用相同的办法加密,看密文与cookle中的是否相同$row = mysqli_fetch_assoc($result);$usename_t = $row['username'];$password_t = $row['password'];$file=$row['file'];$key = "zeianquan";$key_t = md5($usename_t.$password_t.$key);if ($key_t!= $resarr[0]){exit("<script>alert('请首先登录2!');location.href='dengluhouduan.php';</script>");}}else {exit("<script>alert('请首先登录3!');location.href='dengluhouduan.php';</script>");}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title><?php echo $usename_t?>的主页</title>
</head>
<body >
这是主页!!!!!!
</body>
</html>

session

session识别用户的,他与cookie的不同在于Cookie保存在客户端浏览器中,而Session保存在服务器上,因此,session的工作原理是为每个访客创建一个UID,一般通过cookie保存,或者通过URL传导。
1.开始session
session_start();
必须位于HTML标签之前
2.设置数据
$_session['name']=.........或者$-session=$var;

3.生命周期
可使用cookie设置

setcookie(session_name,session_id,expire);

4。用户禁用cookie后,可以使用URL传递UID
比如用一个超链接

<a href="####".session_id.>

session

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器渲染机制

1. 明白浏览器渲染的目的 可访问性&#xff08;Accessability&#xff09;、加载性能和重构灵活性一直是前端工程师们关心的主题。 其中加载性能与浏览器的渲染机制深深挂钩&#xff0c;弄明白浏览器背后的渲染机制&#xff0c;才能在日常的前端的开发中明白如何进行性能优化。…

java中List Set Map使用

Testpublic void run(){ArrayList<String> list new ArrayList<String>();list.add( "美女");list.add( "帅哥");list.add( "芙蓉姐姐" );for (int i 0; i < list.size(); i) {String strlist.get(i);System. out.println(str);…

python免费开源工具推荐_年薪200万的程序员,推荐这10大Python免费开源工具!

原标题&#xff1a;年薪200万的程序员&#xff0c;推荐这10大Python免费开源工具&#xff01;毫无疑问&#xff0c;Python是最流行的语言之一&#xff0c;其成功的原因之一是它为科学计算提供了广泛的报道。 在这里&#xff0c;我们仔细研究用于机器学习和数据科学的十大Python…

通过Yeoman快速搭建AngularJS webapp应用的实践

这里主要记录关于使用yeoman快速构建angluarJS的前端应用的实践&#xff1a; 安装node、yeoman等过程略去 1、首页我们可以在公共的脚手架中找到自己想要的脚手架&#xff0c;官方脚手架库的地址 Yeoman generators: http://yeoman.io/generators/ 这里我们选择官方团队出的ang…

[Objective-C]编程艺术 笔记整理

看了《禅与 Objective-C 编程艺术》&#xff0c;发现不少平时不注意的或注意但没有系统总结的东西&#xff0c;特此记录一下。 这次没有整理完&#xff0c;后续更新会结合手里的一些其他资料整理。 新博客wossoneri.com传送门 完整的介绍看这两个链接Google开源项目风格指南禅与…

python大数据工程师 培训_大数据工程师学习之路

大数据的作用&#xff1a;发现过去事件的特征预测未来最优化选择职位划分&#xff1a;数据产品经理数据分析师->商业敏感性&#xff0c;产品经理的助手数据研发工程师数据挖掘工程师/数据科学家需要准备的技术知识&#xff1a;Linux操作系统与网络编程&#xff1a;进程/线程…

python序列

python序列 列表 python变量不存放值&#xff0c;之存放值的引用&#xff0c;所以列表中元素可以是不同类型 1.常用方法 1.1 增加元素 append,在末尾插入元素 extend&#xff0c;将一个列表整体插入到尾部 insert&#xff0c;将某个元素插入到特定位 /*&#xff0c;拼合…

前端资源(11)

移动端API 地址99移动端知识集合 https://github.com/jtyjty99999/mobileTech移动端前端开发知识库 https://github.com/AlloyTeam/Mars移动前端的一些坑和解决方法&#xff08;外观表现&#xff09; http://caibaojian.com/mobile-web-bug.html【原】移动web资源整理 http://w…

win10使用Composer-Setup安装Composer以及使用Composer安装Yii2最新版

1&#xff1a;下载 ca-bundle.crt和cacert.pem(见导航栏——文件) 将这两个文件放在php目录下 2:php.ini中添加上述两个文件的路径 curl.cainfoC:/xampp/php/ca-bundle.crtopenssl.cafileC:/xampp/php/ca-bundle.crt 写到最后一行就可以 3&#xff1a;下载Composer-Setup.exe h…

python离群点检测方法分几类_数据分析 第五篇:离群点检测

离群点(outlier)是指和其他观测点偏离非常大的数据点&#xff0c;离群点是异常的数据点&#xff0c;但是不一定是错误的数据点。确定离群点对于数据分析会带来不利的影响&#xff0c;比如&#xff0c;增大错误方差、影响预测和影响正态性。从散点图上可以直观地看到离群点&…

计算机网络TCP/IP

TCP/IP原理 看《图解TCP/IP》时做的笔记&#xff0c;记录一些感觉重要的东西…还没完&#xff0c;正在学&#xff0c;慢慢写 1.计算机网络的发展 2.OSI参考模型 3.传输方式分类 4.地址及网络的构成 5.TCP/IP协议的出现 6.TCP/IP分层模型及通信示例 7.数据链路层1 8.数…

hive求差集和交集

2019独角兽企业重金招聘Python工程师标准>>> 用的要求总数和统计数&#xff1a; 总数的概念是利用安卓ID&#xff0c;就以为这把两个月前的安卓ID统统的统计一遍&#xff0c;如果没有出现&#xff0c;恰好在今天出现了&#xff0c;那么当前的这个用户就是新增的…

python静态方法可以被继承吗_python 类的继承 实例方法.静态方法.类方法的代码解析...

这篇文章主要介绍了python 类的继承 实例方法.静态方法.类方法的代码解析,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下dt{}class Denglu:def register(self,name,psd):if name.isalnum() and psd.isalnum():i…

渐变色--浏览器兼容性

说明&#xff1a; 1.360兼容模式效果不好 2.可以直接用不同浏览器打开这个页面查看效果 <!DOCTYPE html><html><head lang"en"> <meta charset"UTF-8"> <title></title> <style> body{ …

如何学习前端 转载

作者&#xff1a;小不了链接&#xff1a;https://zhuanlan.zhihu.com/p/23265155来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 鉴于时不时&#xff0c;有同学私信问我&#xff08;老姚&#xff0c;下同&#xff09;怎…

tcp前4字节消息长度_网络基础篇之TCP

​网络分层什么是 TCP TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。- 面向连接&#xff1a;通过三次握手建立一对一的连接&#xff08; UDP 协议 可以一个主机同时向多个主机发送消息&#xff0c;即一对多&#xff09;&#xff1b;- 可靠的&#xff1a;通过序号、校…

使用Servlet实现用户注册

1、用户注册页面代码 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&q…

年轻人的第一篇V语言笔记

V语言极限学习 我听说V语言看文档半小时就能完全掌握&#xff1f;&#xff1f;&#xff1f;&#xff1f;以我的智商一小时掌握不了我就给各位科普一下广告法&#xff1f;&#xff1f;&#xff1f; 宇宙惯例hello world // first v code fn main(){printIn("hello world…

android studio运行手机时出错怎么解决_小程序 android ios h5解决方案

你现在开发android,ios,小程序用什么工具&#xff0c;怎么开发的&#xff1f;还在单个端的开发吗&#xff1f;今天我们主要讨论的是一次开发多端使用的技术&#xff0c;也是这两年比较流行的开发方向。现在的终端太多了&#xff0c;app两个端android和ios,小程序有微信&#xf…

Android SDK上手指南:应用程序数据

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/52996965 在本系列教程当中&#xff0c;我们将学习如何从零开始进行Android SDK开发。我们已经熟悉了Android应用程序的结构与基本组成元素&#xff0c;…