zoukankan      html  css  js  c++  java
  • cookie的domain实战

    setcookie方法

    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.combbs.test.com中都可以使用这个cookie,可以解决多个项目之间共享cookie的问题。

    cookie的domain实战

    配置host文件

    在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文件中添加以下的的配置。

    #主应用
    <VirtualHost *:80>
        DocumentRoot "${SRVROOT}/htdocs/test/cookie/main"
        ServerName test.com
    </VirtualHost>
    
    #登录应用
    <VirtualHost *:80>
        DocumentRoot "${SRVROOT}/htdocs/test/cookie/passport"
        ServerName passport.test.com
    </VirtualHost>
    
    #博客应用
    <VirtualHost *:80>
        DocumentRoot "${SRVROOT}/htdocs/test/cookie/blog"
        ServerName blog.test.com
    </VirtualHost>
    
    #错误的博客地址
    <VirtualHost *:80>
        DocumentRoot "${SRVROOT}/htdocs/test/cookie/blog/error"
        ServerName error.blog.test.com
    </VirtualHost>
    
    #论坛应用
    <VirtualHost *:80>
        DocumentRoot "${SRVROOT}/htdocs/test/cookie/bbs"
        ServerName bbs.test.com
    </VirtualHost>

    项目结构图

    这里写图片描述

    bbs:论坛项目
    blog:博客项目
    error.blog:错误的博客地址
    main:主项目
    passport:登录项目

    运行结果图

    这里写图片描述

    首先打开test.com,显示没有登录,然后点击登录,跳转到passport.test.com项目中进行登录,然后将用户名写入到cookie中,这里的cookie的domain为test.com,然后测试了blog.test.combbs.test.com中是否存在cookie,显示都是有cookie的,表示我们设置的domain生效了。

    passport项目

    index.php登录界面

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </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处理登录逻辑

    <?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 '<script>location.href="http://test.com"</script>';
        }
    }
    ?>

    这里首先进行判断用户名和密码是否正确,然后将保存cookie,跳转到主项目。

    每个项目的首页

    <?php
    print_r('当前域名:'.$_SERVER['SERVER_NAME'].'<br/>');
    $username = isset($_COOKIE['username']) ? $_COOKIE['username'] : '';
    if(!empty($username)){
        echo '已登录,用户名:'.$username;
    }else{
        echo '尚未登录,';
        echo '<a href="http://passport.test.com">请前往登录</a>';
    }
    ?>

    每个项目中都有一个index.php,这个文件是判断是否有cookie存在,如果有就显示出来

  • 相关阅读:
    CodeForces
    CodeForces
    CodeForces
    HDU 6704 K-th occurrence(后缀数组,主席树,st表,二分)
    AcWing 1004. 品酒大会 (后缀数组,并查集)
    Gym
    codeforces 2100左右的DS题 做题记录
    P4768 [NOI2018] 归程 做题记录
    CSP 2021 智熄记
    「随笔」论打羽毛球的正确姿势
  • 原文地址:https://www.cnblogs.com/cnsec/p/13406988.html
Copyright © 2011-2022 走看看