开发者社区> 问答> 正文

关于PHP唯一表示符的问题

$_SESSION['uniqid']=$_uniqid=sha1(uniqid(rand(),true));这个$_SESSION['uniqid']和$_uniqid这个不是必然相等吗。。为什么我看到他是判断$_SESSION['uniqid']和$_uniqid的值是不是一样的来判断是否是正常注册。
$_uniqid是表单中隐藏域的值

展开
收起
小旋风柴进 2016-03-06 16:43:17 2171 0
1 条回答
写回答
取消 提交回答
  • 和验证码差不多一个意思吧。。客户端有可能修改过这个值。可以增加别人用curl进行模拟登陆的难度
    1.首先先申明一个函数

    
    /**
     * _check_uniqid
     * @param unknown_type $_first_uniqid
     * @param unknown_type $_end_uniqid
     */
    
    function _check_uniqid($_first_uniqid,$_end_uniqid) {
        
        if ((strlen($_first_uniqid) != 40) || ($_first_uniqid != $_end_uniqid)) {
            _alert_back('唯一标识符异常');
        }
        
        return _mysql_string($_first_uniqid);
    }

    2.在代码中调用该函数

    //判断是否提交了
    if ($_GET['action'] == 'register') {
        //为了防止恶意注册,跨站攻击
        _check_code($_POST['code'],$_SESSION['code']);
        //引入验证文件
        include ROOT_PATH.'includes/register.func.php';
        //创建一个空数组,用来存放提交过来的合法数据
        $_clean = array();
        //可以通过唯一标识符来防止恶意注册,伪装表单跨站攻击等。
        //这个存放入数据库的唯一标识符还有第二个用处,就是登录cookies验证
        $_clean['uniqid'] = _check_uniqid($_POST['uniqid'],$_SESSION['uniqid']);
        //active也是一个唯一标识符,用来刚注册的用户进行激活处理,方可登录。
        $_clean['active'] = _sha1_uniqid();
    
        print_r($_clean);
    } else {
        $_SESSION['uniqid'] = $_uniqid = _sha1_uniqid();
    }
    

    3.在global.func.php调用

    function _sha1_uniqid() {
        return _mysql_string(sha1(uniqid(rand(),true)));
    }
    
    
    2019-07-17 18:54:50
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++开发PHP7扩展 立即下载
使用C++11开发PHP7扩展 立即下载
The Next Gen of PHP 立即下载