2016-12-10 09:43:36 5523次浏览 2条回答 0 悬赏 100 金钱

如题 怎么通过PHP代码获取带#(井号)的完整的URL?

比如有一链接 http://www.abc.com/#/login

要做权限限制,怎么通过PHP代码获取 /login 呢?

  • 回答于 2016-12-10 15:01 举报

    在网上浏览时看到一些网站的URL使用#号后面传递一些字符作为参数,因为URL中#(井号)后的内容是不会被加入HTTP请求的,于是研究了一下,分享给大家。

    URL:http://xxx.com/index.php?id=1#01234abcd

    可以看出此处#后面的字符串作为一个标识使用,那么PHP(以PHP为例)端如何获取这个值呢?

    其实PHP是不能直接获取这个值的!但是我们可以通过变通的方法来实现。常用的是通过JS把这个值设置到cookie里面,然后PHP就能访问这个cookie的数据了:

    //Javascript 代码
    var ss = window.location.href.split("#");
    
    document.cookies = "ss="+ss[1];
    

    然后在PHP中就可以使用 $_COOKIE['ss'] 取得这个值了。

    <script language="javascript">
        var ss =location.href.split("#");
        document.cookie='ss='+ss[1];
        if (ss[1] != "<?php echo $_COOKIE['ss']; ?>") {
            //判断 cookie 是不是最新值,不是则重新载入页面
            window.location.reload();
        }
    </script> 
    <?php echo $_COOKIE['ss']; ?>
    

    这个方式有个缺点,就是设置cookie后需要重新载入,PHP端才会生效,对网速慢的用户体验犹为不佳。

    另一个常用的场景是通过 JS 获取参数,根据值来从PHP端以 AJAX 方式获取数据显示出来。

    如 URL:http://xxx.com/#news

    //location.hash 可获取URL里的#号和后面的部分
    var mod = location.hash;
    if(mod == "#news"){
        //AJAX获取和处理最新数据
        $.ajax(......);
    }
    else if(mod == "#hots"){
        //AJAX获取和处理热门数据
        $.ajax(......);
    }
    

    第二种方式比较适合常见的AJAX应用,编程讲究的就是灵活多变。

    from:https://my.oschina.net/yiqu/blog/336511

    用这玩意儿做权限限制?

  • 回答于 2016-12-10 15:03 举报

    还有个方法是 UrlEncode() 和 UrlDecode() 方法。

    1 条回复
    回复于 2016-12-10 16:17 回复

    好感动,回答问题这么认真~

    主要是我这里做的差不多是个后台管理,但网页使用H5框架写的,我就加载了一下H5框架的入口视图层文件,然后所有页面的点击链接什么的都不走我PHP代码了(所有页面都是域名加/#/***** 这种形式的)。。。 但不同用户只能进特定模块页面,这就比较尴尬了,所有我想在加载H5入口视图层文件前先获取一下URL路径,看一下用户是否有权限

您需要登录后才可以回答。登录 | 立即注册
lzrqyc110
总监

lzrqyc110

注册时间:2016-01-02
最后登录:2018-12-28
在线时长:29小时34分
  • 粉丝37
  • 金钱4195
  • 威望40
  • 积分4885

热门问题