【问题标题】:Cookies are not working on a php session file:Cookie 不适用于 php 会话文件:
【发布时间】:2010-02-28 21:19:43
【问题描述】:

我尝试了以下方法:

基本上,它应该说:如果没有 cookie,则从 Web 浏览器获取 lang(这部分有效,这是 lang.php 的工作)。如果有 cookie,会话将从 cookie 中获取其值。如果没有任何内容,请保留为英文。

session.php

/* Class constructor */
function Session(){
    $this->time = time();
    $this->startSession();
}

function cf($filename){//function to clean a filename string so it is a valid filename
    $fp = explode('/',$filename);
    $num = count($fp);
    return $fp[$num-1];
}

/**
 * startSession - Performs all the actions necessary to
 * initialize this session object. Tries to determine if the
 * the user has logged in already, and sets the variables
 * accordingly. Also takes advantage of this page load to
 * update the active visitors tables.
 */
function startSession(){
    session_start();   //Tell PHP to start the session

    /* Set referrer page */
    if(isset($_SESSION['url'])){
        $this->referrer = $search = $this->cf($_SESSION['url']);
    }else{
        $this->referrer = "/";
    }

    /* Set current url */
    $this->url = $_SESSION['url'] = $this->cf($_SERVER['PHP_SELF']);

    /* Set user-determined language: */
    //set up languages array:
    $langs = array('en','es','zh');
    //
    if(isset($_GET['lang'])){
        if(in_array($_GET['lang'],$langs)){
            $this->lang =  $_SESSION['lang'] = $_GET['lang'];
            setcookie($_SESSION['lang'], time() + (3600 * 24 * 30));
        }
    }
    else if(isSet($_COOKIE['lang'])) {
        $_SESSION['lang'] = $_COOKIE['lang'];
    }
    else {
        $_SESSION['lang'] = 'en';
    }
}

};

【问题讨论】:

    标签: php session cookies


    【解决方案1】:

    setcookie 的参数如下:

    bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
    

    因此,您使用它的方式似乎有点奇怪。 (说的没错。)我还以为是这样的……

    setcookie('lang', $_SESSION['lang'], time() + (3600 * 24 * 30));
    

    ...会更明显一点,也许就是你所追求的。 (这就是 $_COOKIE['lang'] 所需要的。)

    【讨论】:

    • @middaparka 哈哈对不起,我的错。
    【解决方案2】:

    setcookie的第一个参数是cookie名称,第二个参数是cookie值。所以在这种情况下,$_SESSION['lang'] 是 cookie 名称,time() + (3600 * 24 * 30) 是值:

    setcookie($_SESSION['lang'], time() + (3600 * 24 * 30));
    

    【讨论】:

    • @Gumbo 我确实有 setcookie($_SESSION['lang'], time() + (3600 * 24 * 30));
    • @janoChen:是的,这就是重点。您没有指定 cookie 名称。或者更具体地说:您将$_SESSION['lang'] 的值指定为cookie 名称,将time() + (3600 * 24 * 30) 的值指定为cookie 值。
    • 我认为你是对的,我必须指定名称“lang”。这有效: setcookie("lang", $_SESSION['lang'], time() + (3600 * 24 * 30));谢谢
    猜你喜欢
    • 2023-01-29
    • 2017-07-30
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2022-06-17
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多