深入探索PHP模板、Cookie、会话与认证技术
立即解锁
发布时间: 2025-08-19 00:23:13 阅读量: 1 订阅数: 4 


PHP、MySQL和JavaScript学习指南
### 深入探索PHP模板、Cookie、会话与认证技术
#### 1. Smarty模板基础
在PHP开发中,Smarty模板是一个强大的工具,它允许我们在模板中引用字符串、数字变量以及数组。如果你认为模板技术在你的项目中会很有用,可以访问 [Smarty快速入门](http://www.smarty.net/crashcourse.php) 了解更多功能,完整文档可在 [Smarty官方文档](http://www.smarty.net/manual/en/) 查看。
下面是几个关于Smarty模板的常见问题:
1. **使用Smarty等模板系统的三个好处是什么?**
2. **PHP程序如何将变量传递给Smarty模板?**
3. **Smarty模板如何访问传递给它的变量?**
4. **用于遍历数组的Smarty编程标签是什么?**
5. **如何在PHP程序中启用Smarty模板?**
#### 2. PHP中的Cookie技术
随着Web项目变得越来越大且复杂,跟踪用户信息变得至关重要。即使不提供登录和密码功能,也常常需要存储用户当前会话的详细信息,并在用户返回网站时识别他们。Cookie就是实现这一功能的重要技术之一。
##### 2.1 Cookie概述
Cookie是Web服务器通过Web浏览器保存到用户计算机硬盘上的数据项。它可以包含几乎任何字母数字信息(只要不超过4KB),并且可以从计算机中检索并返回给服务器。常见用途包括会话跟踪、跨多次访问维护数据、保存购物车内容、存储登录详细信息等。
由于隐私问题,Cookie只能由发布它的域名读取。例如,如果一个Cookie由oreilly.com发布,那么只有使用该域名的Web服务器才能检索它,这可以防止其他网站访问未经授权的详细信息。
由于互联网的工作方式,网页上的多个元素可以从多个域名嵌入,每个域名都可以发布自己的Cookie,这种情况下的Cookie被称为第三方Cookie。最常见的是,这些Cookie由广告公司创建,用于跨多个网站跟踪用户。因此,大多数浏览器允许用户关闭当前服务器域名、第三方服务器或两者的Cookie。幸运的是,大多数禁用Cookie的人只针对第三方网站。
Cookie在传输HTTP头部时交换,在实际发送网页的HTML之前进行。一旦传输了任何HTML,就无法再发送Cookie,因此需要仔细规划Cookie的使用。
下面是一个典型的浏览器和Web服务器之间传递Cookie的请求和响应对话流程:
```mermaid
sequenceDiagram
participant Browser
participant Server
Browser->>Server: 请求 index.html,发送文件和服务器头部
Server->>Browser: 返回头部,定义内容类型,发送Cookie
Server->>Browser: 传输网页内容
Browser->>Server: 请求 /news.html,返回Cookie
Server->>Browser: 返回请求的页面
```
##### 2.2 设置Cookie
在PHP中设置Cookie很简单,只要还没有传输任何HTML,就可以调用`setcookie`函数,其语法如下:
```php
setcookie(name, value, expire, path, domain, secure, httponly);
```
| 参数 | 描述 | 示例 |
| ---- | ---- | ---- |
| name | Cookie的名称,服务器将使用此名称在后续浏览器请求中访问Cookie | username |
| value | Cookie的值,即Cookie的内容,最多可包含4KB的字母数字文本 | Hannah |
| expire | (可选)过期日期的Unix时间戳,通常使用`time()`加上若干秒。如果未设置,Cookie在浏览器关闭时过期 | time() + 2592000 |
| path | (可选)Cookie在服务器上的路径。如果是`/`,则Cookie在整个域名下可用;如果是子目录,则仅在该子目录内可用。默认是设置Cookie的当前目录 | / |
| domain | (可选)Cookie的互联网域名。如果是`webserver.com`,则Cookie对所有`webserver.com`及其子域名可用;如果是`images.webserver.com`,则仅对该域名及其子域名可用 | .webserver.com |
| secure | (可选)是否必须使用安全连接(https://)。如果为`TRUE`,则Cookie只能通过安全连接传输。默认是`FALSE` | FALSE |
| httponly | (可选,自PHP 5.2.0版本起实现)是否必须使用HTTP协议。如果为`TRUE`,则脚本语言(如JavaScript)无法访问Cookie。并非所有浏览器都支持。默认是`FALSE` | FALSE |
例如,要创建一个名为`username`、值为“Hannah”的Cookie,使其在当前域名的整个Web服务器上可用,并在七天后从浏览器缓存中删除,可以使用以下代码:
```php
setcookie('username', 'Hannah', time() + 60 * 60 * 24 * 7, '/');
```
##### 2.3 访问Cookie
读取Cookie的值就像访问`$_COOKIE`系统数组一样简单。例如,要检查当前浏览器是否已经存储了名为`username`的Cookie,并读取其值,可以使用以下代码:
```php
if (isset($_COOKIE['username'])) $username = $_COOKIE['username'];
```
需要注意的是,只有在将Cookie发送到Web浏览器后才能读取它。这意味着在发布Cookie后,直到浏览器从网站重新加载页面(或另一个可以访问该Cookie的页面)并将Cookie返回给服务器时,才能再次读取它。
##### 2.4 删除Cookie
要删除Cookie,必须再次发布它并设置一个过去的日期。新的`setcookie`调用中除时间戳外的所有参数都必须与首次发布Cookie时的参数相同,否则删除将失败。例如,要删除前面创建的Cookie,可以使用以下代码:
```php
setcookie('username', 'Hannah', time() - 2592000, '/');
```
只要给定的时间在过去,Cookie就应该被删除。为了防止客户端计算机的日期和时间设置不正确,这里使用了一个一个月前的时间(2592000秒)。
#### 3. HTTP认证
HTTP认证使用Web服务器来管理应用程序的用户和密码,适用于大多数要求用户登录的应用程序。不过,有些应用程序有特殊需求或更严格的安全要求,可能需要其他技术。
##### 3.1 HTTP认证原理
要使用HTTP认证,PHP会发送一个头部请求,要求与浏览器启动认证对话。服务器必须启用此功能才能正常工作,但由于该功能非常常见,大多数服务器都提供了此功能。
从用户的角度来看,当他们在浏览器中输入URL或通过链接访问网站时,会弹出一个“Authentication Required”提示框,要求输入用户名和密码。
以下是实现HTTP认证的示例代码:
```php
<?php
if (isset($_SERVER['PHP_AUTH_USER']) &&
isset($_SERVER['PHP_AUTH_PW']))
{
echo "Welcome User: " . $_SERVER['PHP_AUTH_USER'] .
" Password: " . $_SERVER['PHP_AUTH_PW'];
}
else
{
header('WWW-Authenticate: Basic realm="Restricted Section"');
header('HTTP/1.0 401 Unauthorized');
die("Please enter your username and password");
}
?>
`
```
0
0
复制全文
相关推荐










