61阅读

php单点登录解决方案-百度收录主域名和后面带index.html/index.php网页解决方法

发布时间:2017-10-24 所属栏目:google plus是什么

一 : 百度收录主域名和后面带index.html/index.php网页解决方法

  我是一小白,之前网站是由网站公司的人在搭理,后来自己想打理,就把源码自己拿了过来。

  但是突然有一天发现我的网站www.oruifine.com的百度快照显示为2015-2-04,但是通过站长工具查询却显示快照时间为2015-2-17.然后我就site了我的网站,发现第一页是不带index.html的主域名,收录时间为2015-2-14,第二页出现了主域名带index.html的百度快照,时间是2015-2-17.而且之前权重是1,现在变为0了,关键词排名也下降了。

  百度了同时收录主域名和带index.html,发现很多人都在问这个问题,有人说这种情况会导致网站首页分权,不利于优化,也有人说这个没什么关系。但是看着就是不爽,所以我就到处百度查看解决方法。

  一:空间没有设置默认首页,解决方法就是把index.html设置为默认首页,我的空间是万网的,默认首页也是设置为index.html

  二:在其他网站发了大量带index.html的外链,这个我也domain了我的网站,我的外链全是主域名,没有带index.html

  三:网站结构问题,首页没有统一,网上大神给出的方法就是要统一首页网址,有首页的地方最好用绝对路径,直接把主域名写上去。(最开始我绕过了这条,最后折腾了几天发现还是这个问题)

  四:就是直接用robots把带index.html给屏蔽掉

  五:用301跳转,把index.html跳转到主域名(因为我是小白,这个方法我实在不会)

  以上几条解决方法可以参考 (如何避免网站收录带index.html的首页导致权重分散)

  下面我要说的是我如何查出问题,并解决的,因为网上很多方法只是说了个大概,没有详细的步骤,对于我们这种小白,我觉得还是能给出详细步骤为好。

  首页我用到的工具有Xenu 死链检测工具,这个直接百度搜,到处都能下载。

  前面说了,出现这种同时收录主域名和带index.html情况,网上的解决方法就那么几条,所以我们也只能一条一条去尝试。

  当然我的默认首页是已经设置过了,在浏览器输入www.oruifine.com 带了index.html也会自动跳转到主域名,所以这条我直接跳过。

  然后我就用Xenu查看我网站全部链接,因为是企业官网,所以内部链接不多,查找其他还是比较方便,如果你的网站很大,这个工具适不适合我就不知道了。

  

 

  打开Xenu,点击 “文件” –“检查网址”,然后在弹出的输入框中输入你的主域名,再点确定,等待显示100%时就完成了。

  PS:完成后会提示是否生成报告,我是选择否;另外这个工具非常好用,还可以用来整理网站链接,查询你的哪些页面被百度收录了。

  

 

  然后点击“编辑”—“查找”,输入 “index.html”,点击查找下一个,这样以此查看是否有主域名带index.html,如果你查出确实有这条链接,那么你的就容易解决了。 直接右键点击这条链接,再点击属性选项,就会弹出一个对话框,它会显示你这条链接是在哪个或者哪几个页面出现,然后你找到这几个页面改掉里面的带index.html链接就可以了。(打开问题页面,然后直接右键页面内容选择查看源文件,就能显示网页代码,再搜索index.html就可以定位到问题链接)。

  我反复几次搜索了我的网站所有页面,也没有发现存在主域名带index.html,当时就给懵了。后来实在没办法,我就只好robots禁止了index.html。过了几天发现有人说robots禁止可能导致主域名被禁,没办法我只好继续查找解决办法。

  重点来了:一次偶然机会,我打开了一个404页面,我的404页面是网上下载的源码,当我点击回到主页时,发现出现了index.html。所以我意识到这个404页面应该就是导致百度收录我的index.html的根源(因为网站做了一个大改动,之前被百度收录的产品页面全删除,重新发布了新的页面,这样就导致了非常多的404页面,而且之前的404页面源码有问题,虽然显示是404,但是用站长工具检测返回值都是200).

  PS:如果有遇到静态网404页面设置OK,显示OK,但是返回值是200的,可以查看下我的404页面,我的方法就是把404.html改成404.asp,这个方法也是偶然机会查到的,希望有机会帮助遇到同样问题的朋友。

  找到问题所在后,我又把另外一个问题网站 的404页面改掉了,之前这个网站也是主域名迟迟不更新,但是我改掉404的index.html后,不到一周百度快照就更新了。

二 : php和json_encode 中文解决方法

json_encode 中文解决方法



json 是一个很好的数据结构现在已经广泛用在网络数据传输上

php 自身待了两个和json 相关的函数
json_encode 和 json_decode

这两个函数的具体用法 网上有很多相关的文章
本文主要介绍 用json_encode 时 中文无法转换的解决方案

本文假设 文件所用的编码为gb2312;

先写出所需的数组


<?php
$json = array (
0 =>
array (
'id' => '13',
'name' => '乒乓球',
),
1 =>
array (
'id' => '17',
'name' => '篮球',
)
)
?>


如果直接用函数json_encode


<?php

echo json_encode($json);
?>


结果为:


<?php
[{"id":"13","name":null},{"id":"13","name":null}]
?>



可以看到汉字没有被转义 都为null

这是因为json仅仅转义encoding编码

故上面语句应该先转换编码


<?php

foreach ($ajax as $key=>$val)
{
$ajax[$key]['name'] = urlencode($val['name']);
}
echo json_encode($json);

?>


客户端js代码



<script type="text/javascript">
function getsort(obj)
{
$.ajax(
{
type : "GET",
url : "<?=$this->baseUrl?>/index/getajax",
data : "c=" obj.value,
success : function(json)
{
var json=eval(json);

var html = '<select>';
$.each(json, function(k)
{
html = '<option value="' json[k]['id'] '">' decodeURI(json[k]['name']) '</option>';
});
html ="</select>";
$('#sort').html(html);
}
}
)
}
</script>



用上面的代码js会报错 说编码不符合标准

原因是因为js 中decodeURI 仅仅支持utf8 转码
所以
php
代码应该为下面的代码


<?php

foreach ($ajax as $key=>$val)
{
$ajax[$key]['name'] = urlencode(iconv('gb2312','utf-8',$val['name']));
}
echo json_encode($json);

?>

三 : PHP整数取余返回负数的相关解决方法

PHP语言虽然功能强大,但并不代表其没有缺点,在编写代码的过程中未免会遇到一些让人头痛的问题。下面我们将为大家介绍有关PHP整数取余返回负数的解决办法。

我们先来看个例子.

代码如下:

$res=1624479(www.61k.com)9483;

echo$res%9999999;

//输出结果为-5069794,正确的结果应该是4801107

其实这也算上PHP一个BUG吧.最主要是PHP是个弱类型语言.他内置了机器来判断用户的类型.

但是机器毕竟是机器.也有判断出错的时候.就像上面.所以这时候我们就需要人工干预下.

所以我就想到要用下面的方法来解决PHP整数取余返回负数的问题.

代码如下:

$res=floatval(16244799483);

var_dump($res%9999999);

我们看到结果还是错误的-5069794.

但是值得注意的是返回是一个int类型的.

详细思考了一下.PHP整数取余返回负数的问题是这样处理的.

PHP取余默认为整数的.

而且当你定义$res=16244799483;

其实就已经溢出了.所以要加上强制类型转换.变成float类型.

但是这样还不够.因为%这个取模计算还是针对整数的.

所以我们需要一个函数fmod.是针对float类型的.

所以最终PHP整数取余返回负数的解决办法为:

代码如下:

$res=floatval(16244799483);

var_dump(fmod($res,9999999));

这样我们就解决了PHP整数取余返回负数这个问题

四 : 纯基于PHP的单点登陆

【引自纯月的博客】Discuz有一个通行证,类似于单点登陆。不过我觉得单点登陆最好应该是一个独立的程序,和CAS一样。由于所有的程序都是PHP的,所以就做了一个简单的单点登陆。借用了一下discuz的加密方法。

用户有以下几种情况会直接访问本系统:

1、用户直接访问passport,希望登陆
2、用户从passport_app上点击登陆按钮转过来的
3、用户从passport_app1转到passport_app2时候,passport_app2转过来的
4、用户直接输入访问passport_app的URL

2 3 4或者有referer,或者有fromurl的参数

====

1 使用通行证的应用程序上面的登陆按钮全部指向下面的链接:http://localhost/passport/login.php

2 如果用户已经登陆了,转到5

3 如果用户还没有登陆
转到一个登陆页面,要包含参数:
用户名,密码,fromurl(预处理过的refer)
提交到login.php?op=login

4 验证通过以后,设置自身的session或者cookies

5 根据用户http头里面的refer得到来源地址。
5.1 如果没有来源地址则显示本passport登陆成功页面,上面列出所有的passport应用
5.2 如果有refer,则跳回到refer的地址,即到6

6 转到通行证应用的passport_login.php页面,传递的参数包括:
◆$userinfo 一个数组,包含了用户名,角色,组等其它信息,一般不需要包含密码
◆$fromurl
◆$verify md5($auth.$fromurl) 保证用户信息没有被篡改

===============================

7 passport_login.php

首先检查参数有没有被改变
然后取出参数内的user_id

验证通过以后,

如果user_id在系统内存不做处理

如果不存在,则根据编码添加该用户

最后设置自己的session/cookies,然后跳转到fromurl

===============================

通行证的密匙,可以自行填写英文,可包含任何字母及数字,长度大于 10 字节

=============================

代码如下:

session_start();

$username = "";
$password = "";
$loginerror = "";
$fromurl = '';

if(isset($_GET['fromurl']) && trim($_GET['fromurl'])!= '') {
$fromurl = $_GET['fromurl'];
}else if(isset($_SERVER['HTTP_REFERER']) && trim($_SERVER['HTTP_REFERER'])!= '') {
$fromurl = $_SERVER['HTTP_REFERER'];
}

//防止同一个服务器装了多个upassport互相干扰
$key = md5(DB_DATABASE.DB_USER.DB_PASSWORD);
if(!isset($_SESSION['passport_app'])) {
unset($_SESSION['u']);
$_SESSION['passport_app'] = $key;
include('themes/'.THEME.'/login.html');
exit;
}else if($_SESSION['passport_app'] != $key) {
unset($_SESSION['u']);
$_SESSION['passport_app'] = $key;
include('themes/'.THEME.'/login.html');
exit;
}

if (isset($_POST['op'])&&trim($_POST['op'])=='dologin') {

$valid = 0;
$authnum = $_POST['authnum'];
$username = $_POST['username'];

$fromurl = $_POST['fromurl'];

if ($authnum && trim($_SESSION['authnum'])==$authnum && $username) {

$password = $_POST['password'];

$user = $db->getRow("select * from $dbutils->user where username =

'$username' and password = '$password'");

if (!empty($user) && $user['user_id']!=0) {
$u['user_id'] = $user['user_id'];
$u['username'] = $user['username'];
$u['truename'] = $user['truename'];

$u['group'] = $db->getRow("select ug.group_id,g.group_name from

$dbutils->user_group ug,$dbutils->group g where ug.group_id =

g.group_id and ug.user_id = ".$user['user_id']);

$u['roles'] = $db->getAll("select ur.role_id,r.role_name,

r.privileges from $dbutils->user_role ur,$dbutils->role r where

ur.role_id = r.role_id and ur.user_id = ".$user['user_id']);

$privileges = Array();
foreach($u['roles'] as $role) {
$role_privis = explode(',',$role['privileges']);

foreach($role_privis as $p) {
if(!in_array($p,$privileges)) array_push($privileges,$p);

}
}

$u['privileges'] = $privileges ;
$_SESSION['u'] = $u;
$valid =1;
}
}

if (!$valid) {
$loginerror = ''."非法登陆".'';
$username = $_POST['username'];
unset($u);
}
}

//用户正常跳转或者访问
$u = isset($_SESSION['u']) ? $_SESSION['u'] : '';

if (empty($u)) { //用户不存在,跳到登陆界面

include('themes/'.THEME.'/login.html');
exit;

}else { //用户存在,表示已经登陆过了

if(trim($fromurl)=='') { //没有referer,则显示默认主页,列出所有应用

$t->assign('u',$u);
$t->render('index.html', "欢迎登陆通行证",'wrap.html',true);

}else { //从别的应用转过来的,可能是上面 2 3 4,此时必有referer

//根据referer的url得到当前的应用的key和完整的地址
$passport_app = $db->GetRow("select * from $dbutils->app where

INSTR('$fromurl', url)=1");

$userinfo = passport_encrypt(passport_encode($u), $passport_app['key']);
$verify = md5($userinfo.$fromurl.$passport_app['key']);

header("Location: ".$passport_app['login_url'].
"?userinfo=".rawurlencode($userinfo).
"&fromurl=".rawurlencode($fromurl).
"&verify=$verify");
}
}

客户应用检验单点登陆的方法如下:

$passport_key = '1234567890';

if($_GET['verify'] != md5($_GET['userinfo'].$_GET['fromurl'].$passport_key)) {
exit('Illegal request');
}

$u = array();
parse_str(passport_decrypt($_GET['userinfo'], $passport_key), $u);

header("location: ".$_GET['fromurl']);

【相关文章】

  • 用PHP实现Ftp用户的在线管理
  • Delphi新版拥抱PHP
  • 用Pear加速PHP程序开发

五 : PHP使用Google Plus Oauth登录(1)

前阵子Google+已经发布了OAuth的应用程序编程接口,现在他们只提供用户活动和循环数据。我已经使用PHP通过Google+数据简单实现了一个称为用户身份验证的登录系统。试试这几乎就像twitter登录系统,我希望未来Google+会释放更多选项。

PHP使用Google Plus Oauth登录(1)_google plus是什么

使用Google Plus Oauth登录

第一步

点击这里添加或者注册你的域名。

PHP使用Google Plus Oauth登录(1)_google plus是什么

添加或者注册你的域名

第二步

通过HTML文件上传或包括META标签来验证您的域名所有权。

PHP使用Google Plus Oauth登录(1)_google plus是什么

通过HTML文件上传或包括META标签来验证您的域名所有权。

第三步

谷歌将会提供你OAuth用户密钥和秘密密钥。

PHP使用Google Plus Oauth登录(1)_google plus是什么

谷歌将会提供你OAuth用户密钥和秘密密钥

第四步

在Oauth控制台创建客户端ID(Client ID)。

PHP使用Google Plus Oauth登录(1)_google plus是什么

在Oauth控制台创建客户端ID(Client ID)

PHP使用Google Plus Oauth登录(1)_google plus是什么

在Oauth控制台创建客户端ID(Client ID)

第五步

应用的Oauth Client ID和客户端密钥(client secret)。

PHP使用Google Plus Oauth登录(1)_google plus是什么

应用的Oauth Client ID和客户端密钥(client secret)

下面来看一下我们的程序文件。

PHP使用Google Plus Oauth登录(1)_google plus是什么

Config.php

在这里,你必须配置OAuth应用密钥和用户密钥。

  1. //OAuth2Settings,youcangetthesekeysathttps://code.google.com/apis/consoleStep6keys
  2. 'oauth2_client_id'=>'AppClientID',
  3. 'oauth2_client_secret'=>'AppClientSecret',
  4. 'oauth2_redirect_uri'=>'http://yoursite.com/gplus/index.php',
  5. //OAuth1SettingsStep3keys.
  6. 'oauth_consumer_key'=>'OAuthConsumerKey',
  7. 'oauth_consumer_secret'=>'OAuthConsumerSecret',

gplus_login.php

google+的登录系统。

  1. <?php
  2. require_once'src/apiClient.php';
  3. require_once'src/contrib/apiPlusService.php';
  4. session_start();
  5. $client=newapiClient();
  6. $client->setApplicationName("9lessonsGoogle+LoginApplication");
  7. $client->setScopes(array('https://www.googleapis.com/auth/plus.me'));
  8. $plus=newapiPlusService($client);
  9. if(isset($_REQUEST['logout'])){
  10. unset($_SESSION['access_token']);
  11. }
  12. if(isset($_GET['code'])){
  13. $client->authenticate();
  14. $_SESSION['access_token']=$client->getAccessToken();
  15. header('Location:http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
  16. }
  17. if(isset($_SESSION['access_token'])){
  18. $client->setAccessToken($_SESSION['access_token']);
  19. }
  20. if($client->getAccessToken()){
  21. $me=$plus->people->get('me');
  22. $_SESSION['access_token']=$client->getAccessToken();
  23. }else
  24. $authUrl=$client->createAuthUrl();
  25. if(isset($me)){
  26. $_SESSION['gplusdata']=$me;
  27. header("location:home.php");
  28. }
  29. if(isset($authUrl))
  30. print"<aclass='login'href='$authUrl'>GooglePlusLogin</a>";
  31. else
  32. print"<aclass='logout'href='index.php?logout'>Logout</a>";
  33. ?>

home.php

这里包含了将google+的session信息插入user数据表的PHP代码。

  1. <?php
  2. session_start();
  3. if(!isset($_SESSION['gplusdata'])){
  4. //Redirectiontohomepage
  5. header("location:index.php");
  6. }else{
  7. $me=$_SESSION['gplusdata'];
  8. echo"<imgsrc='{$me['image']['url']}'/>";
  9. echo"Name:{$me['displayName']}";
  10. echo"GplusId:{$me['id']}";
  11. echo"Male:{$me['gender']}";
  12. echo"Relationship:{$me['relationshipStatus']}";
  13. echo"Location:{$me['placesLived'][0]['value']}";
  14. echo"Tagline:{$me['tagline']}";
  15. print"<aclass='logout'href='index.php?logout'>Logout</a>";
  16. }
  17. ?>

下面附上使用Google Plus Oauth登录的示例源码:下载点这里

原文链接:

本文标题:php单点登录解决方案-百度收录主域名和后面带index.html/index.php网页解决方法
本文地址: http://www.61k.com/1076944.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1