《深入浅出的PHP&SQL》读书笔记

第一章 为静态页面赋予生命

  1. PHP是一种服务器端语言
    在服务器上运行
    存储在PHP脚本中
    文件扩展名.php
    服务器运行一个PHP脚本后,会生成一个HTML与CSS页面
  2. HTML: mailto 发送邮件
<form method=”post” sction=mailto:12345@123.com>
  1. PHP脚本运行过程:

    1. 客户浏览器请求一个HTML页面
    2. 服务器返回页面
    3. 用户填写表单并提交,浏览器会将数据传送给服务器上的一个PHP脚本
    4.	服务器运行PHP,并生成一个HTMl页面
    5.	服务器返回一个由PHP生成的纯HTML页面
    6.	email发送给收信人
    
  2. 表单通过form元素的action属性与一个PHP脚本相连,从而在提交表单时导致脚本运行

<form action=”a.php” method=”post”>
  1. PHP (Hypertext Processor)PHP超文本处理器
  2. 使用PHP访问表单内容
    PHP中包含常规的HTML标记和属性
  3. PHP必须放在Web服务器上,否则无法运行
    除此之外,还需要确认你的服务器是否安装PHP服务
    1. 创建一个文件名为text.php
<?php
 phpinfo();
?>
2)	将text.php上传到服务器上
3)	将URL输入到浏览器,观察返回结果,如果返回PHP的详细信息,则安装;否则,没有安装
  1. 服务器将PHP转换为HTML
    大部分服务器都同时包含PHP和HTML,再将数据作为HTML从服务器传送到客户端之前,这个PHP代码会转换成HTMl,然后传送到Web浏览器。
  2. 分析PHP脚本
    1. <?php 中间添加PHP代码 ?> PHP代码总是用<?php ?>包
    2. $when 变量 以$开头 允许存储值,可以显示数字、文本或其他数据类型
    3. echo命令返回HTMl echo ‘Hello Word’;
    4. 每一个PHP语句都以(;)结尾
    5. 如果一个文件中包含PHP,上传到服务器上时,需要用到扩展名.php而不是.html
  3. 变量命名规则
    变量是一个容器,可以在其中存储数据,每个变量都有一个唯一的名字
    必须遵守的规则:
    1. 以$开头
    2. 区分大小写
    3. 不能包含空格,
    4. 长度至少有1个字符
    5. 第一个字母可以是字母或下划线(_),后面的可以是字符、数字、字母
    6. 非_或$的特殊字符不允许出现在变量名中
      可选用规则:
    1. 变量名都用小写
    1. 用下划线分隔变量名中的单词
  4. PHP在大多数情况下是不区分大小写的,例如echo Echo Echo都是一样的;但是按照约定,PHP一般大小写保持统一。
    变量名区分大小写
  5. 变量
$my_name=’Alan Walker’;

php文本,也称为字符串,必须用引号引出,可以是单引号或者双引号。
13. $_POST

  1. $_POST是一个包含数据的特殊全局变量,超级全局变量
    在PHP脚本运行开始就已经存在,是一个内定函数
  2. 用法:
$how_long=$_POST[‘when it happen’];
3)	`$_POST` 超级全局变量直接绑定到HTML表单的提交方法,如果设置为POST,那么所有的数据都可以打包到`$_POST` 超级全局变量中,也可以根据实际情况提出部分数据。
4)	`$_POST`是一个特殊的PHP容器,称为数组。人们键入的数据就存储在$_POST数组中,这个数组的任务就是将数据传送到脚本
5)	表单域的名确定了如何在`$_POST`数组中访问
<input type=”text”  id=”hoemany” name=”number”/></br>

也就是这里的name
14. ‘.’连接两个字符串

$name=$_POST['frist_name’] . ‘ ’ $_POST[‘last_name’]
Alan Waker

将一个变量和一个字符串连接时,变量中不一定包含文本
15. echo命令
将额外的信息作为HTML输出浏览器
就是PHP生成html的关键
16. 只要谨慎安排如何分割代码,一个很长的PHP代码可以跨行
17. 利用PHP格式化文本

  1. PHP中的转义字符以一个反斜杠(\)开头
    换行符号\n
    单引号\’
    双引号 \”
  2. 换行时需要添加双引号
    PHP中单引号和双引号决定PHP处理字符串的方式
    换行符\n只能在双引号中转义
    PHP处理变量的时候会寻找变量,在一个双引号中遇到变量时,PHP会在字符串中插入变量的值
$how_long=$name was staied in $where for almost $how_long \n;

单引号处理字符串时对于纯文本而没有添加变量的十分有用,但如果是有变量或者转义字符的话,是用双引号会更加方便
3) 如果我需要在单引号串中引用单引号应该怎么做呢?
\’
He \’ a teacher.
4) 单引号串中只支持\’ \ 转义字符,\n等转义字符需要在双引号中才能引用
18. 在email中添加收信地址、发送地址、主题
1) $email=$_POST[‘email’]; 发信人地址
2) $to =’地址’;收信人地址
3) $subject=’主题’;主题
4) mail ($to ,$subject ,$msg); $msg 消息体
这三部分是mail函数的必须信息,还可以在函数中添加

mail ($to ,$subject ,$msg,’From:.$name);  

‘Cc’ :copy 抄送
‘Bcc’:blind copy 密送
如果同时指定’From’和copy者,需要加上转义字符\r \n将其分开

“From:. $name . “\r\n Cc” .  $cc;

第二章 链接SQL

此部分内容会省略SQL部分,详情请见:《深入浅出的SQL》读书笔记

  1. SQL与PHP连接的好处
    如果没有PHP,就需要手动分别将一条有一条的SQL语句输入
    但是有了PHP之后,我们就可以让PHP替我们完成这繁琐的工作了
  2. SQL与PHP连接之后
    1. 用户填完表中信息,点击提交
    2. 页面中的表单调用服务器中的脚本
    3. 脚本连接数据库,使用INCERT将信息填入数据库
    4. 搜索和删除数据库中的信息
    5. 就可以使用多种方式访问数据
  3. 从PHP连接数据库
    必要的信息:数据库服务器的主机位置、用户名、口令、数据库名
    1. 建立与数据库的连接
myaqli_connect()

需要信息:用户名、口令、数据库名
可选信息:数据库的位置(域名、IP地址或localhost),也可以用函数mysqli_select_db()指定数据库名

$dbc=mysqli_connect(
‘data.alinen.com’,  数据库的地址
‘owen’,  用户名
‘alensrool’,  口令
‘alendatabase’  数据库名
)

myaqli_connect()函数将用户名、口令、数据库名、数据库的位置处理为串,所以必须用引号引出
2) 将查询构建一个PHP串
一旦myaqli_connect()函数与SQL建立连接,就可以直接使用PHP进行查询和添加了
mysqli_query()函数需要一个存储在PHP串($query)中的SQL查询才能完成数据插入

$query=INCERT INTO MY_contacts”.(column1_name,column2_sex,……).VALUES.(‘Merry’,’g’,’ ‘……);

点号.告诉PHP上一个串和下一个串连接在一起
查询分为多行,提高代码的可读性
必须以分号结尾

  1. 进行查询
    SQL查询是一个用SQL编写并发送到数据库服务器的一请求
    mysqli_query()函数需要一个数据串连接和一个查询串来完成SQL查询
mysqli_query(database_connection,query);
	4)	完成数据库查询,关闭连接

mysqli_close()
mysqli_close(database_connection);
要在括号中传入前面一直与数据库交互时的使用的数据库连接变量,这个变量包含数据库连接的引用,也就是第一次打开数据库myaqli_connect()时创建的
数据库同时只能允许一定数目的可用连接,所以尽可能的节省
4. die()函数
如果出现问题,这会向你发回一个信息,并终止这个工作
die()函数会终止一个PHP脚本,并提供失败代码的反馈

$dbc=mysqli_connect(‘data.alinen.com’, ‘owen’,  ‘alensrool’,‘alendatabase’  )
or die(ERROR connected to sql’);

如果未能连接到SQL就会返回die()函数中的信息
两条语句中不需要分号,因为die()函数从技术上讲是上一条语句的补充
5. 必须创建一个变量来存储$_POST中的数据吗?
嘿嘿,重点来了
黑客可以采用截获数据等的方法拦截你的查询
所以不要投机取巧哦
6. 完成这些操作之后就可以查看数据库中的内容了

SELECT * FROM aliens ;

第三章 创建与填充数据库

  1. Web应用
    是一个设计用来满足用户某个特定目标的动态网站
  2. 创建一个自动发送邮件给数据库中的用户的应用
    1. 为邮件列表创建一个数据库
      数据库中的文件一般存在硬盘上的文件中,都是二进制
    2. 创建一个Web表单(增加邮件),添加新用户
    3. 创建一个web表单(发送邮件),并创建向邮件列表自动发送邮件的PHP脚本
    4. 删除用户
  3. 在编写SQL语句时,每一条语句后面都需要加上分号,但是在PHP中使用sqli_query()函数时SQL语句不需要加分号,这是因为一次只能执行一条语句。但是在PHP语句写完时需要加分号。
  4. Web表单与PHP脚本
    需要有n个输入域和1个按钮,根据实际情况而定。表单动作是表单的重要组成部分,任务是将数据传送给我们的脚本。
  5. sqli_fetch_array() 函数
    获取查询结果,将一个数据行存储在一个数组中
    r o w = s q l i f e t c h a r r a y ( row=sqli_fetch_array( row=sqlifetcharray(result);
    使用变量row存储表中得到的数据,一次获取一行。每个数据行作为一个数组返回,并存储在row中。
  6. while循环
    当满足某个条件是重复执行一个代码
while($row=sqli_fetch_array($result)){
	echo $row[‘first name’] . ‘ ‘ echo $row[‘last name’]. ‘ ‘echo $row[‘email’].<br/>;
}

while循环语句逐行检查数据,检查完所有数据行时停止。
当条件结果为true,执行括号里的代码;在没有可用数据时,
$row=sqli_fetch_array($result)会返回false,循环中止。

第四章 现实的实际应用

  1. 验证数据
    验证就是在处理数据之前先进行检查的过程,从而使表单数据是合法有效的。
  2. if语句
    if关键字、测试条件、动作
if(isvaild($row)){
	fillorder();
}
  1. “==”要将结果进行一个完全相等的比较
    “<>”、”!=”不相等
    “>”、”<”
  2. &&、||:逻辑与(and)、逻辑或(or),也可以用and or代替
  1. else字句
    else字句仅在if语句的结果为false时才执行代码
  2. isset()函数、empty()函数
    isset()函数测试一个变量是否存在或已经设置
    empty()函数:检测变量是否包含一个空值(0)、空字符串(‘ ’或” ”)、或false及NULL
  3. !操作符
    对结果进行取反
  4. 可以根据需要结束和开始PHP代码块,在PHP脚本中输出HTML代码
<?php
$from =123456.com’;
$subject=$_POST[‘subject’];
$text=$_POST[‘elvismail’];
$output_form=false;

if(empty($subject)&&empty($text)){
	echo ’You forgot the subject and body text’;
	$out_put_form=true;
}
if(empty($subject)&&!empty($text)){
	echo ’You forgot the subject’;
	$out_put_form=true;
}
if(!empty($subject)&&empty($text)){
	echo ’You forgot the body text’;
	$out_put_form=true;
}
if(!empty($subject)&&!empty($text)){
	mail();
}

if(output_form){
?>
	<form method=”post” action=”xxx.php”>
	<label for=”subject” >Subject for email:</lable><br/>
	<input id=”subject” name=”subject” type=”text” size=30/><br/>
	<label for=”elvmail”>Subject for email:</lable><br/>
	<textarea id=”elvmail”   name=”elvmail” roes=8” cols=40/><br/>
	<input type=”submit” name=”submit” value=”submit”/>
</form>
<?php
}
?>
  1. 自引用表单
    HTML表单作为PHP脚本的一部分,而该PHP脚本将处理这个表单,那么这个表单称为子引用表单
  2. 粘性表单
    能记录用户之前已经正确输入的数据
  1. $_SERVER['PHP_SELF’]超级全局变量
    存储当前PHP脚本的名字
<form method=”post” action=$_SERVER[PHP_SELF]>
  1. 检查脚本是否已经提交
isset($_POST[‘submit’])

返回true or false
$_POST超级全局变量允许查看表单是否已经提交
11. foreach()循环
是一个特殊的循环,专门设计用来循环处理一个数组中存储的值。允许循环处理一个数组,每次处理一个元素,而无需使用测试条件

foreach($customers as $customer){
	echo $customer;
}

希望循环处理的数组放在前面
后一个变量用来存储变量:随着循环逐个处理数组中的元素,会将这些元素临时存放在这个变量中,该变量名在as后指出
在循环内部,可以利用前面的变量名访问各个元素

第五章 使用存储在文本中的数据

1.	如何从表单向数据库中上传一个图像?

将图像文件存储在数据库中?这样做的话也并不是不可以,但是在数据库中存储的都是二进制,如果我们需要引用图片的话,似乎不太方便,所以我们可以:
1) 使用ALTER向数据库中添加新的一列SCREENSHOT,用来存储图片文件名
2) 使用一个文件输入域允许图像文件上传
3) 编写一个INCERT语句将图片文件名插入到数据库中
4) 修改HTML,显示图片
2. HTML标记支持文件表单域

<form enctype=”multipart/form-data” method=”post” action=<?php echo $_SERVER[PHP_SELF];?>>

enctype=”multipart/form-data”这个表单属性告诉表单文件使用一种特殊类型编码,会影响提交表单时如何打包和发送POST数据

<input type=”hidden” name=MAX_FILE_SIZE” value=32 768/>

为文件上传建立一个大小上限,此处为图片文件,可以设置为32KB(大多数图片文件的大小都在32 768之内)
3. $_FILES 内置PHP超级全局变量
允许访问上传文件的有关信息

$_FILES['screenshots’][‘name’];上传文件名
$_FILES['screenshots’][‘typr’];上传的图片类型
$_FILES['screenshots’][‘size’];上传的图片大小
$_FILES['screenshots’][‘tmp_name’];文件在服务器上的临时存储位置
$_FILES['screenshots’][‘error’];文件上传的错误码,为0时正常
  1. 存储在外部文件的数据一般保留在外部文件中
  2. 在Web页面上存储一个图像文件只需一个引用,也就是图片文件名
<img src=” ’.  $row[‘screenshot’] .’ ” alt=”image”>
  1. 上传的文件去哪了?
    上传的文件一般会放在一个临时文件中,并随机生成一组数字作为文件的名称,所以他的名称和位置都是未知的。所以我们需要将图片文件上传到www文件夹中,并定义名称
move_uploaded_file($_FILES[‘screenshots’][‘tmp_name’] ,$target);
  1. 使用php.ini文件修改上传文件的初始位置
    upload_tmp_dir
    但如果是在虚拟服务器上,这招可能不管用
  2. 初始文件夹 VS 临时文件夹
    初始文件夹被称为临时文件夹,是因为该文件夹并不是文件的最终位置,可以把它当作一个存储容器,文件暂时存放在这里,直到他们被移动到最终的存储位置
  3. 为上传图像建立一个文件夹
    引用图片文件
    $target=GW_UPLOADPATH . $SCREENSHOT;
    GW_UPLOADPATH常量,存储这图片文件夹的路径
    常量和变量相似都会存储一个数值,但是在常量中存储的数值一旦确定就无法修改。
    如果你的服务器不是本地服务器,就需要使用FTP建立一个文件夹
  4. 用户上传的图片文件重名了怎么办?
    如果两个图片重名,则后一个文件将会覆盖前一个文件。为了防止这种情况,可以给文件的相对路径加上当前服务器的时间
    t a r g e t = G E U P L O A D P A T H . t i m e ( ) . target=GE_UPLOADPATH.time() . target=GEUPLOADPATH.time().SCREENSHOT;
    time()函数返回一个唯一的数值
  5. 数据库非常擅长存储文本,但是通常最好引用外部文件的二进制数据
  6. 共享脚本数据
    1. 共享的脚本数据要在整个应用中都能访问,则无需代码重复
    2. require_once(‘index.php’);负责将一个脚本包含在另一个脚本中
    3. 任何PHP代码都可以放在共享脚本中
    4. require_once与include的区别:
      如果未找到对应的文件,require_once会返回一个错误,而include不会返回错误。require_once保证文件不会意外包含多次,

本周笔记 本周笔记 本周笔记

  1. order by排序
  2. 对上传图像大小进行限制
    防止大文件上传,可以防止人们上传非法图像。
if(($_FILES['screenshot’][‘size’]<=32k0&&($_FILES[‘screenshot’][‘type’]==’gif/jpg’)

确保上传文件不出错

$_FILES[‘file’][‘error’]==0
  1. unlink函数
    从Web服务器上删除文件
  2. @防止文件上传未成功时显示错误代码
  3. 检查文件大于0字节
    电脑上如果没有用户指定的文件,服务器就有可能创建一个大小为0字节的文件
  4. 管理页面
    Web应用一般包含一些公众可以访问的页面,另外也包含一些用于管理的页面
  5. get请求
    脚本的URL可以用于将数据作为一个GET求传递
<a href=”xx.php?
		id=5$
		date=2020-5-10$
		name=Alen$
		score=2123$screenshot=>Remove</a>

每一个数据都含一个名和一个值,并用一个&得号与其他名/值对分分隔。
xxx.php脚本还包含需要操作的代码
在传统的HTML get请求中,表单数据会自动作为表单的URL的一部分发送到表单处理脚本。
POST请求只能从表单发出,而GET请求可以打包为URL。
20. 对比GET请求与POST请求
POST请求:当用户填写完表单并按下提交按钮时,表单数据就会打包,并作为一个POS请求发送到脚本。发送的数据是不可见的,影响服务器
GET请求:主要用于从服务器上获取数据但不影响服务器的其他方面。主要适用于发送少量数据
由同一个脚本为GET和POST请求发出响应是完全可能的,甚至在有些情况下还是很有帮助的。
21. SQL中limit函数
限制操作的数据行的数量

DELETE FROM apple WHERE name=’apple’LIMIT 1;

第六章 保护应用安全

  1. 如何保护一个应用的安全?
    1. 利用口令保护 Admin页面.只有知道口令的人才能删除分数。
    2. 创建一个用户注册系统,只有某些用户才有管理权限。
    3. 检查想要访问 Admin页面的计算机的IP地址,只允许某些计算机访问。
    4. 完全去除删除特性
  2. HTTP认证
    用户尝试访问一个通过认证保护的页面时,会为用户提供一个窗口,要求输入一个用户名和口令,只有存储了正确的用户名和口令才允许访问该页面。
	$_SERVER[PHP_AUTH_USER]
存储输入到认证窗口的用户名
$_SERVER[PHP_AUTH_PW]
存储输入到认证窗口的口令
  1. 认证和首部
    首部是一个短小的文本信息,包含所请求或所传达的特殊指令,每一个首部通常包含一段信息的名/值对。其中包含请求页面的名和主机名、发出请求的浏览器类型
    可以中断服务器的页面传送,并在真正传送页面时发出一个请求用户输入用户名和口令。
    1. 浏览器请求服务器上的一个页面,为此发送两个首部来标识所请求的文件和服务器的主机名。
    2. 服务器以一个首部集合做响应,其后是请求的页面。
    3. 浏览器接收首部和页面,并显示页面的HTML代码。

GET /index.php HTTP /1.1
HOST:www.baidu.com
Connection:close
User-agent:……
第一个首部不是名/值,而是一个页面的GET请求
5. 利用PHP控制首部
需要两个不同的首部请求Web页面认证

HTTP/1.1 401 Unauthorized

这个首部告诉浏览器用户没有得到查看页面的授权

WWW.Authenticate: Basic realm=””

这个首部要求浏览器尝试提示用户输入一个用户名和口令
”Basic realm“基本域是一个用于唯一标识这个特定认证的短语,他会出现在认证窗口
如果用户输入了不正确的用户名和口令,并点击 Log In(登录),服务器告诉浏览器再次提示用户输入。倘若用户仍输入不正确的用户名和口令组合,浏览器就继续这一过程。换句话说,如果用户不知道用户名和口令,退出的唯一途径就是点击 Cancel(撤销)。
6. header函数

header('Contact-Type:text/html’);

header()函数允外PHP脚本创建和送首部
这个函数必须在向浏览器发出任何内容之前调用,非常严格

<?php
		header('Contact-Type:text/html’);
……
?>

注:
1) 即使<?php之前的任何一个空格都会导致这个脚本出错
2) <?php?>之间的任何空格都不会影响,因为他们不会发送到浏览器上在后面加上需要传送的页面
7. 首部的其他用处
1) 接受这个首部时浏览器会重新定义到about页面

<?php
header(‘Location:www.xxx.net/about.html’)
?>
2)	刷新首部

浏览器在5秒后重新定向到about页面

<?php
header(‘Refresh:5 url= www.xxx.net/about.html’);
echo’In 5 second you’ll be taken to the about page.;
?>
3)	内容类型首部

运用到这个首部,输出到页面的文本完全源样而无任何格式

<?php
header(‘Content-Type:text/plain’);
echo ‘This text won’t be bold.?>
  1. exit()函数
<?php
……
header(HTTP/1.1 401 Unauthorized’);
header(WWW.Authenticate: Basic realm=””’);
exit(‘Sorry,check your name and password or you don’t have the right to see this page.);
……
?>

只有当用户点击cancel,才会调用exit()函数,在这种情况下它会发出函数调用中的内容而不发送任何其他内容
9. 基本域
定义了一个特定用户名和口令所保护的安全区,一旦成功的旦成功地输入了对应一个给定域的用户名和口令,浏览器会记住这个用户名和口令,而对同一个域中后续的认证首部不会再显示认证窗口。
10. 有些人可能下定决心通过逆向工浧分祈你的PHP脚本,并用其中的漏洞。绝对不要低估这些人的能力。嘻嘻嘻
保证安全的方法
1) 人类仲裁
可以改善用户所提交的内容的完整性。
在表中增加一列用来判断改记录数据是否经过人为处理
2) HTTP认证
3) 表单验证
4) SQL防御
11. ENUM类型

ALTER TABLE fruit ADD COLUMN approved ENUM('yes’,’no’);
  1. SQL注入之注释
    表单域是Web应用的一个安全漏洞,因为他们允许用户输入
    注释符“–”、“/* */”、“#”
  2. 保护数据不受SQL注入攻击
    SQL注入可以通过适当的处理表单数据来避免
    1. trim()函数
      可以去除前导或末尾的空格
    2. mysqli_real_escape_string()
      将可能危险的字符进行转义,使他不能有意的破坏查询的执行
      n a m e = m y s q l i r e a l − e s c a p e s t r i n g ( name=mysqli_real-escape_string( name=mysqlirealescapestring(dbc,trim($_POSR[‘name’]))
    3. 使用一个更安全的INSERT
INSERT INTO fruit 
VALUES(NOE(),$name,$score,0);ID列不进行赋值,因为其本来就会自增,如果让用户输入就会有隐患,人为处理的一列数据默认初始值为0
  1. SQL中DEFAULT 函数

ALTER TABLE fruit MODEFY COLUMN approved tinyint DEFAULT 0;

DEFAULT使得approved列自动赋值为0,除非INSERT查询显示这一列设置为其他值
  1. PHP中is_numeric()函数
    检查这一值是否为数字,如果传入一个数字,返回true,若不是,返回false

第七章 构建个性化Web应用

  1. 个性化应用需要个人信息,这就要求用户能在个人层次上访问应用
  2. 通过登陆,Web应用可以实现针对用户的个性化。用户名、口令
  3. 用户登录
    1. 用ALTER向表中添加user、password列
    2. 构造一个新的log_in脚本,提示用户输入用户名和密码,与上一章提供的类似
    3. 讲log-in脚本连接到页面
  4. SHA()加密口令
    SQL提供的SHA()会对一个文本串应用一个加密算法,其结果是一个加密串,长度为40 个十六进制的字符。不论原口令长度是多少
INSERT IN fruit (user_name,password,join_date)
VALUES (‘fruit’,SHA(‘apple’),2020);
1)	数据库中存储的也是40 字符的口令
2)	SHA()函数提供了一个单向加密口令,而且无法对已知的数据进行解密
SELET * FROM fruit WHERE password=SHA('apple’);
3)	定义时为口令留足空间
  1. SQL中的MD5()函数加密
    SHA()比MD5更安全,对应PHP中的shal()和md5()

  2. 注册新用户
    输入两次命令,避免用户输入错误。不仅注册,还需要筛选该用户是否已经注册过,并返回“该用户已经注册”。如果未找到该用户的信息,在向数据库中添加

  3. 用户注销
    一旦用户登录后,会一直显示登录状态,如何关闭呢?
    HTTP认证将数据持久的存储在在客户端,但是工作结束时不允许你将其删除。
    cookie允许将数据持久的存储在客户端,这些数据可以跨脚本的存在,而且可以根据需要删除

  4. cookie
    cookie中存储了一小段数据,与变量不同,cookie可以有一个到期时间,达到这个时间之后,cookie就会被销毁。可以设置一个没有到期日期的cookie,这种情况下,cookie就相当于一个PHP变量,会在浏览器关闭时被销毁。

 user_id=1
 5/20/2020

user_id是cookie中的唯一变量,“1”是存储在cookie中的值,“5/20/2020”是到期时间
9. setcookie()函数
用于设置一个cookie的值和一个可选的到期时间,设置cookie的作用在于,cookie可以在跨多个脚本持久存储

setcookie(‘username’,’apple’)echo($_COOKIE[‘username’]);

第一个存储在cookie中的值作为cookie的名,第二个参数传入作为cookie的值;$_COOKIE超级全局变量提供对cookie的访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值