在URL中的“#”后解析URL值

时间:2012-11-30 05:43:00

标签: php

我正在尝试使用Microsoft Live Connect进行一个非常简单的登录,但是我在解析返回的令牌时遇到了问题。我称这个网址为:

https://login.live.com/oauth20_authorize.srf?client_id=MY_CLIENT_ID&scope=wl.skydrive_update&response_type=token&redirect_uri=http%3A%2F%2FMY_SITE.com%2Fcallback.php

它将我带到Microsoft服务器,登录,确认权限,然后正确加载回调URL,如下所示:

http://MY_SITE.com/callback.php#access_token=LOTS_OF_STUFF&authentication_token=MORE_STUFF&token_type=bearer&expires_in=3600&scope=wl.skydrive_update

现在的问题是如何获得这些令牌?我该怎么解析那个?他们使用'#'代替'?'..所以$ _GET为空,$ _POST为空,$ _SERVER ['REQUEST_URI']没有显示任何内容。

2 个答案:

答案 0 :(得分:2)

通常,浏览器不会将哈希符号后的值发送到服务器。您可以在客户端使用JavaScript处理它们。 请参阅:Why the hash part of the URL is not in the server side?

答案 1 :(得分:0)

不幸的是,他们返回的哈希字符意味着在客户端处理。如果您确实需要使用服务器端脚本(PHP)解析值,则可以使用JavaScript再次重定向。您可以尝试添加以下JavaScript代码:

  window.onload = function() {
    // redirect if hash is detected
    if(window.location.hash)
    {
      var redirect_hash = window.location.hash.replace('#', '?');
      var redirect_location = 'http://' + document.domain + redirect_uri;
      window.location = redirect_location;      
    }
  }

然后可以在重定向时解析查询字符串值。