bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
在setcookie
方法中,第5个参数是domain参数,通过这个参数可以解决顶级域名和多级域名共享cookie
的问题。换句话说,假设我们有一个顶级域名test.com
,那么如果设置cookie的时候将domain设置成test.com
的话,那么在blog.test.com
和bbs.test.com
中都可以使用这个cookie,可以解决多个项目之间共享cookie的问题。
在host文件中配置上这样的一段
127.0.0.1 test.com #顶级域名
127.0.0.1 passport.test.com #登录二级域名
127.0.0.1 blog.test.com #博客二级域名
127.0.0.1 error.blog.test.com #博客错误地址二级域名
127.0.0.1 bbs.test.com #论坛二级域名
由于是在我的本地测试的,我的本地采用的是apache服务器,所以先启用vhost文件,然后在vhost文件中添加以下的的配置。
#主应用
DocumentRoot "${SRVROOT}/htdocs/test/cookie/main"
ServerName test.com
#登录应用
DocumentRoot "${SRVROOT}/htdocs/test/cookie/passport"
ServerName passport.test.com
#博客应用
DocumentRoot "${SRVROOT}/htdocs/test/cookie/blog"
ServerName blog.test.com
#错误的博客地址
DocumentRoot "${SRVROOT}/htdocs/test/cookie/blog/error"
ServerName error.blog.test.com
#论坛应用
DocumentRoot "${SRVROOT}/htdocs/test/cookie/bbs"
ServerName bbs.test.com
bbs:论坛项目
blog:博客项目
error.blog:错误的博客地址
main:主项目
passport:登录项目
首先打开test.com
,显示没有登录,然后点击登录,跳转到passport.test.com
项目中进行登录,然后将用户名写入到cookie中,这里的cookie的domain为test.com
,然后测试了blog.test.com
和bbs.test.com
中是否存在cookie,显示都是有cookie的,表示我们设置的domain生效了。
index.php登录界面
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
head>
<body>
<h1>登录界面h1>
<form action="dologin.php" method="post">
<p>用户名:<input type="text" name="username">p>
<p>密码:<input type="password" name="password">p>
<p><input type="submit" value="登录">p>
form>
body>
html>
dologin.php处理登录逻辑
header("Content-type:text/html;charset=utf-8");
$username = $_POST['username'];
$password = $_POST['password'];
if(!empty($username) && !empty($password)){
if($username == 'zhangsan' && $password == '123456'){
//将用户保存到cookie中
setcookie('username',$username,0,'/','test.com');
echo '';
}
}
?>
这里首先进行判断用户名和密码是否正确,然后将保存cookie,跳转到主项目。
print_r('当前域名:'.$_SERVER['SERVER_NAME'].'
');
$username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
if(!empty($username)){
echo '已登录,用户名:'.$username;
}else{
echo '尚未登录,';
echo '请前往登录';
}
?>
每个项目中都有一个index.php,这个文件是判断是否有cookie存在,如果有就显示出来