跪求php语言转java急啊

来源:互联网 发布:mac 连接linux服务器 编辑:程序博客网 时间:2024/05/21 09:53
<?phpclass User extends CI_Model {    public function __construct() {        parent::__construct();        defined('RUN_TIME') || define('RUN_TIME', time());        $this->load->model('share');    }     function iflogin($redirect = true, $forward='') {        $this->share->cncn_session_start();        $uid = 0;         //检查是SESSION和COOKIE里的uch_auth是否一致,确保是同一个人        $still_login = false;        if(isset($_SESSION['uch_auth']) && isset($_COOKIE['uch_auth']) && ($_SESSION['uch_auth'] == $_COOKIE['uch_auth'])){            $still_login = true;        }        if (isset($_SESSION['uid']) && $_SESSION['uid'] && $still_login) {            $uid = $_SESSION['uid'];             // 没有相关缓存时,做退出的操作,is.cncn.net这里不再做单独的同步退出            if (empty($_COOKIE['uch_auth'])) {                $this->doexit();                                }             // 每5分钟检测登录期间是否登录进程已被删除(比如其他进程修改了密码)            if ( $this->chk_auth_session($uid) < 0 ) {                $this->doexit();             }             // 每60秒更换一次session_id            if ( empty($_SESSION['last_sess_time']) ) {                $_SESSION['last_sess_time'] = time();            } elseif (time() - $_SESSION['last_sess_time'] > 60) {                session_regenerate_id(TRUE);                $_SESSION['last_sess_time'] = time();            }        } else {            if (isset($_COOKIE['uch_auth']) && $_COOKIE['uch_auth']) {                $uid = $this->chk_auth_cookie();                // cookie信息通过了验证时,从cookie恢复登录状态                //------------------------------------------------                if ($uid > 0) {                    // 生成session、cookie                    $this->set_login($uid);                    // 添加登录进程检测相关的session值,以便于后续session进行检测                    $_SESSION['last_uc_check_time'] = time();                 //------------------------------------------------                } else {                    $uid = 0;                }            }        }        if (!$uid && $redirect) {            // 如果是来自ajax的请求,则不做跳转,否则ajax接收到的就是登录页面的html代码            $ajax = $this->input->get_post('ajax');            if (empty($ajax)) {                if (empty($forward)) {                    $forward = empty($_SERVER['REQUEST_URI']) ? $this->uri->uri_string : 'http://'. $_SERVER['HTTP_HOST']. $_SERVER['REQUEST_URI'];                }                header('Location: '. NET_URL. 'login?forward=' . urlencode($forward));                exit;            } else {                $this->share->cncn_exit('您尚未登录');            }        }        return $uid;    }      /*     * 验证保持登录的cookie是否正确     * @param  string  $check_type   验证类型(默认为cookie):     *                     cookie   通过cookie恢复登录时进行的验证     *                     session  恢复登录后已有session时进行的验证,这时不验证登录权限的有效时间(因为有可能cookie已失效,但session还在的情况)     * @return  mixed    验证登录时,返回该cookie对应的UID,失败时,返回FALSE     */    function chk_auth_cookie($check_type='cookie') {          if ($check_type == 'cookie') {            if (empty($_COOKIE['uch_auth'])) {                return -1;            }                        $auth_code = $_COOKIE['uch_auth'];            $uid = 0;        } else {            if (empty($_SESSION['uch_auth'])) {                return -1;            }                        $auth_code = $_SESSION['uch_auth'];            $uid = $_SESSION['uid'];        }          $info = array(            'uid'         => $uid,            'auth_code'   => $auth_code,            'client_ip'   => $_SERVER['REMOTE_ADDR'],            'client_info' => $this->get_client_info(),            'user_agent'  => $this->get_client_info(FALSE),            'check_type'  => $check_type,        );         static $checked;        if ($checked[$auth_code]) {            return $checked[$auth_code];        }         if ( CURRENT_ENV == 'production' ) {            $uc_key = '6e1a233d3c9d4677a617096d70e0c612';        } else {            $uc_key = 'adc0a1d842a7545633b06f451aa3a74c';        }          $info = array(            'sign' => $this->authcode(serialize($info), 'ENCODE', $uc_key),            'from' => 'finance',        );         // 向服务端发起验证请求        if ( CURRENT_ENV == 'production' ) {            $url = 'http://www.cncn.net/homepage/check_uc_session';        } else {            $url = 'http://192.168.1.158:876/homepage/check_uc_session';        }         $info = http_build_query($info);        $ch = curl_init($url);        curl_setopt($ch, CURLOPT_HEADER, 0);        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        curl_setopt($ch, CURLOPT_POST, 1);        curl_setopt($ch, CURLOPT_TIMEOUT, 10);        curl_setopt($ch, CURLOPT_POSTFIELDS, $info);        $r = curl_exec($ch);         curl_close($ch);         $return = unserialize($this->authcode($r, 'DECODE', $uc_key));         if ( empty($return['uid']) ) {            return '-997';        }         $uid = $checked[$auth_code] = $return['uid'];         // 验证失败        if ($uid < 0 ) {            return $uid;        }         // 确定返回的验证结果是否已失效        if ( time() - $return['time'] > 300 ) {            return '-996';        }         return $uid;    }     /*     * 每5分钟检测登录期间是否登录进程已被删除(比如其他进程修改了密码)     * @param   int  $uid 当前登录用户,保存在session里的uid     *     * @return  mixed     验证登录时,返回该cookie对应的UID,失败时,返回FALSE     */    function chk_auth_session($uid) {        if ( isset($_SESSION['last_uc_check_time']) && time() - $_SESSION['last_uc_check_time'] > 300 ) {            $uid = $this->chk_auth_cookie('session');            if ( $uid < 0 ) {                                    // 登录凭证验证失败后,将当前的session删除                if (session_id() != '') {   // check login被调用多次。。所以这里需要加个判断                    session_destroy();                }            } else {                $_SESSION['last_uc_check_time'] = time();            }        }        if ( empty($uid) || $uid < 0 ) {            $uid = 0;        }        return $uid;    }     function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {     $ckey_length = 4;     $key = md5($key ? $key : CNCN_API_KEY);    $keya = md5(substr($key, 0, 16));    $keyb = md5(substr($key, 16, 16));    $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';     $cryptkey = $keya.md5($keya.$keyc);    $key_length = strlen($cryptkey);     $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;    $string_length = strlen($string);     $result = '';    $box = range(0, 255);     $rndkey = array();    for($i = 0; $i <= 255; $i++) {    $rndkey[$i] = ord($cryptkey[$i % $key_length]);    }     for($j = $i = 0; $i < 256; $i++) {    $j = ($j + $box[$i] + $rndkey[$i]) % 256;    $tmp = $box[$i];    $box[$i] = $box[$j];    $box[$j] = $tmp;    }     for($a = $j = $i = 0; $i < $string_length; $i++) {    $a = ($a + 1) % 256;    $j = ($j + $box[$a]) % 256;    $tmp = $box[$a];    $box[$a] = $box[$j];    $box[$j] = $tmp;    $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));    }     if($operation == 'DECODE') {    if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {    return substr($result, 26);    } else {    return '';    }    } else {    return $keyc.str_replace('=', '', base64_encode($result));    }    }     /*     * 获取用户的浏览器信息,进行md5加密后返回     *     * @return  string     */    function get_client_info($md5=TRUE) {        $info = array(            'agent'  => empty($_SERVER['HTTP_USER_AGENT']) ? 'user_agent' : $_SERVER['HTTP_USER_AGENT'],             'lang'   => empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? 'gbk' : strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']),         );         $info = join('', $info);         return $md5 ? md5($info) : $info;    }      function doexit() {        $this->share->cncn_session_start();        $syn = '';         // 彻底清空session        $_SESSION = array();        if (ini_get("session.use_cookies")) {            $params = session_get_cookie_params();            setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]            );        }        session_destroy();         setcookie("uc_auth", "", time() - 3600, '/', config_item('cookiedomain'));        setcookie("uch_auth", "", time() - 3600, '/', config_item('cookiedomain'));        echo $syn . '<script>location.href="/";</script>';        exit;    }     /**     * 获取uid获取相应的字段信息     *     * @param  mixed    $uids    需要获取字段的uid,可为多个,超过一个时用数组传递     * @param $type     需要获取的字段类型     *     */    public function get_value_byid($uids, $type, $table = 'member') {        if (!$is_array = is_array($uids)) {            $uids = array($uids);        }        $return = array();         $this->cncndb = $this->load->database('cncndb', TRUE);        $query = $this->cncndb->select('uid, ' . $type)->from($table)->where_in('uid', $uids)->get();        foreach ($query->result_array() as $k => $v) {            $return[$v['uid']] = $v[$type];        }         return $is_array ? $return : array_pop($return);    }      /*     * 对用户登录的session进行处理     * @param   int     $uid       用户编号     * @param   string  $nickname  用户昵称,如果未传递,则根据uid从member表获取     * @param   int     $expire    cookie保存时间,单位为秒,默认为NULL,即浏览器关闭后就失效     * @return void     */     function set_login($uid, $nickname = '', $expire = NULL) {        // 保存session        $this->share->cncn_session_start();        $_SESSION = array();   // 设置登录session前,应该清空之前的session,避免用户会串在一起        $_SESSION['uid'] = $uid;        $_SESSION['nickname'] = $nickname;             // 未传递时需要从用户库获取        $_SESSION['contact_name'] = $contact_name;     // 未传递时需要从用户库获取        $_SESSION['user_type'] = $user_type;           // 未传递时需要从用户库获取        $_SESSION['login_time']   = time();    } }
0 0
原创粉丝点击