php实现主域名与二级域名共享session并单点登录

 更新时间:2016年11月25日 16:17  点击:1966
其实php下cookies或session实现多二级域名同时登录小编觉得还是比较简单了,下面一起来看一个例子吧.

公司网站设置了几个二级域名,老板要求无论会员走到哪个域名,主域名或者二级域名,用户都是登录状态,而不需要重新登录。
很明显,要求是单点登录。

php中有两种方法实现,情况不外乎是利用cookie保存session_id,各域名都可以访问到该cookie,进而获取该session_id:

1. 使用session_set_cookie_params()方法:

session_set_cookie_params(0, $path,'abc.com');

2. 使用ini_set或修改php.ini,修改session.cookie_domain的值:

ini_set('session.cookie_domain','abc.com')

PHPMailer是一款邮件发送插件了,我们只要简单的配置就可以实现发邮件了,但小编在配置使用ssl时发现无法连接服务器了,下面我们来看问题解决办法.

使用PHPMailer发送邮件都是使用未加密的smtp服务器,这次使用的smtp服务器要用ssl(Secure Sockets Layer,安全套接层)方式连接。

好在PHPMailer支持ssl的smtp服务器,网上查了资料,以为改下端口,加上SMTPSecure设置就可以了,但是事实并非如此。

代码中端口改成了465,加了$mail->SMTPSecure = "ssl";设置,结果PHPMailer一直提示不能连接主机。

网上各种查资料,各种咨询,百般折腾后终于找到了原因,PHP没有开启openssl扩展,汗……

windows开启openssl扩展

在php.ini文件中找到;extension=php_openssl.dll,把前边的“分号”去掉,重启一下Apache即可。

linux开启openssl扩展

cd php-5.2.14/ext/openssl/
mv config0.m4 config.m4
phpize
./configure
make
make install
 
修改php.ini文件, 在适当的位置添加

extension=openssl.so

给php-fpm master进程发一个USR2信号,ssl扩展添加成功。

php curl函数是可以实现文件下载功能了,下面这个例子是利用 php curl下载文件来处理服务器间文件手动同步了,有兴趣的可进入看看.

有一个需求,情况如下:

两台服务器,一台测试服务器[apache],一台生产服务器[nginx],产品编辑人员在测试服务器使用php upload批量上传产品,图片,经检查后,
可以同步其所上传的产品和图片[打包成zip文件]到生产服务器上,但生产服务器上不接受php upload上传文件的,那么就不能在测试服务器上直接post到正式

服务器了。

 

暂时想到几个方法:
1. 使用rsync手动同步过去,但需要配置,并且需要php执行shell命令,但我不想这样。
2. 可以使用socket来传送数据,但需要开启端口,我也不想这么做,因如果一时忘记在防火墙开放端口,就无法传送了
3. 测试服务器发送信号到生产服务器,让生产服务器使用php curl从测试服务器下载文件并处理

通过比较,还是觉得第3种方法比较妥当,直接全程使用php来处理,至少减少一些不必要的维护麻烦。

以下是php curl download的方法代码内容:

function curl_download($testing_server_file, $local_file) {
  $rfp = curl_init($testing_server_file);
  $fp = fopen($local_file, "wb");
 
  curl_setopt($cp, CURLOPT_FILE, $fp);
  curl_setopt($cp, CURLOPT_HEADER, 0);
 
  curl_exec($rfp);
 
  $errno = curl_errno($rfp);
  $errmsg = curl_error($rfp);
 
  curl_close($rfp);
  fclose($fp); 
 
  if($errno){
    echo $errmsg;
    exit;
  }
}

本文章是关于appcan开发移动app与服务器端session的状态管理与交互例子,希望此开会例子可以帮助到大家的哦.

我们进行web开发的时候,一般使用cookie或session来保存用户的登录状态,通过检查cookie或session的数据来验证用户是否具有对某些需要登录的页面的访问权限,这一切都是通过浏览器来完成,这是b/s架构,但是,假如客户端是移动应用端,那该怎么办?因为这是c/s架构,无法使用使用cookie或session来检验用户的状态,此时的情况就好像浏览器禁用了cookie。

庆幸的是,这是有解决方法的,在禁用cookie的情况下,可以通过query_string来传递session_id,即在app发送登录请求后,服务器端可以通过传递session_id到app,然后app保存session_id在移动设备上,在那些需要登录访问权限的功能,每一次交互请求附带参数session_id,传送到服务器端,再由服务器端检查session_id的合法性来确定该用户是否已登录。

以下是一个简单的移动开发示例,并没有使用原生的,而是使用appcan来构建app:

1. app登录请求:

var url = 'http://127.0.0.1:8080/index.php?act=login&email=aa@qq.com&pwd=123456'; 
$.getJSON(url,function(res){
 if(res.ok == 'yes'){
  var storage = window.localStorage;
  if(storage) storage.setItem('sid',res.session_id);
 }else{
  uexWindow.toast(0, 5, '登录失败!', 4000);
  return;
 }  
}, 'json',null, 'POST', '', '');

2. app请求用户信息:

var sid = '';
var storage = window.localStorage;
if(storage) sid = storage.getItem('sid');
var url = 'http://127.0.0.1:8080/index.php?act=uinfo&session_id='+sid; 
$.getJSON(url,function(res){
 if(res.ok == 'yes'){
  var uname = res.username;
  uexWindow.toast(0, 5, '用户名:'+uname, 4000);
  return;
 }else{
  uexWindow.toast(0, 5, '请先登录!', 4000);
  return;
 }  
}, 'json',null, 'POST', '', '');

3. 服务器端php响应请求[index.php]:

<?php
/**
 * User: wudiweb.com
 * app与服务器端简单示例
 */
header("Content-Type: text/html; charset='utf-8'");
session_start();
 
$act = $_REQUEST['act'];
$result = array('ok' => 'yes');
 
if($act == 'login'){
    $email = $_REQUEST['email'];
    $pwd = $_REQUEST['pwd'];
 
    if($email == 'aa@qq.com' && $pwd == '123456'){
        $result['session_id'] = session_id();
    }else{
        $result['ok'] = 'no';
    }
}elseif($act == 'uinfo'){
    $session_id = $_REQUEST['session_id'];
    if($session_id == session_id()){
        $result['username'] = 'Wudiweb';
    }else{
        $result['ok'] = 'no';
    }
}
 
echo json_encode($result);
exit;

注意,这只是一个简单的用法,如果你认为不够完善,可以在此基础上进行扩展,例如加密session_id等。

下面来为各位介绍一个PHP的cURL库实现网页抓取例子介绍,这个例子非常详细的介绍了curl函数的实际应用了各位有兴趣来看看吧.

使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。本文主要讲述如果使用这个PHP库。

下面是一个利用cURL库抓取网页的简单例子:


<?php
$curl = curl_init(); //初始化一个cURL对象
curl_setopt($curl, CURLOPT_URL, 'http://cocre.com'); //设置你需要抓取的URL
curl_setopt($curl, CURLOPT_HEADER, 1); //设置header
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //设置cURL参数
$data = curl_exec($curl); //运行cURL,请求网页
curl_close($curl); //关闭URL请求
var_dump($data); //显示获得的数据
?>

如何POST数据

上面是抓取网页的代码,下面则是向某个网页POST数据。假设我们有一个处理表单的网址http://www.example.com/sendSMS.php,其可以接受两个表单域,一个是电话号码,一个是短信内容。


<?php
$phoneNumber = '13912345678';
$message = 'This message was generated by curl and php';
$curlPost  = 'pNUMBER=' . urlencode($phoneNumber);
$curlPost .= '&amp;MESSAGE=' . urlencode($message);
$curlPost .= '&amp;SUBMIT=Send';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/sendSMS.php');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec();curl_close($ch);
?>
从上面的程序我们可以看到,使用CURLOPT_POST设置HTTP协议的POST方法,而不是GET方法,然后以CURLOPT_POSTFIELDS设置POST的数据。

关于代理服务器

下面是一个如何使用代理服务器的示例。请注意其中高亮的代码,代码很简单,我就不用多说了。


<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($ch, CURLOPT_PROXY, 'fakeproxy.com:1080');
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');
$data = curl_exec();curl_close($ch);
?>

关于SSL和Cookie

关于SSL也就是HTTPS协议,你只需要把CURLOPT_URL连接中的http://变成https://就可以了。当然,还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点。

关于Cookie,你需要了解下面三个参数:

CURLOPT_COOKIE,在当面的会话中设置一个cookie

CURLOPT_COOKIEJAR,当会话结束的时候保存一个Cookie

CURLOPT_COOKIEFILE,Cookie的文件。

HTTP服务器认证

最后,我们来看一看HTTP服务器认证的情况。


<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt(CURLOPT_USERPWD, '[username]:[password]');
 
$data = curl_exec();
curl_close($ch);
?>
关于其它更多的内容,请参看相关的cURL手册。

[!--infotagslink--]

相关文章

  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • PHP分布式框架如何使用Memcache同步SESSION教程

    本教程主要讲解PHP项目如何用实现memcache分布式,配置使用memcache存储session数据,以及memcache的SESSION数据如何同步。 至于Memcache的安装配置,我们就不讲了,以前...2016-11-25
  • 详解C#中的session用法

    这篇文章主要介绍了C#中的session用法 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Python3使用Selenium获取session和token方法详解

    这篇文章主要介绍了Python3使用Selenium获取session和token方法详解,需要的朋友可以参考下...2021-02-17
  • 编程新手必须掌握的:session与cookie的区别

    session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章和资料的参阅,及作者个人的应用体会,对这两个概念做一个简单的阐述...2013-09-11
  • PHP中如何使用session实现保存用户登录信息

    session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。使用session保存页面登录信息1、数据库连接...2015-10-21
  • Vue使用axios引起的后台session不同操作

    这篇文章主要介绍了Vue使用axios引起的后台session不同操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-14
  • php中session常见问题分析

    PHP的session功能,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。 1. 错误提示 引用 代...2016-11-25
  • php设置session生存时间详解

    要设置php生存有效时间我们可以利用session_set_cookie_params函数或修改php.ini文件哦,下面小编来介绍一下。 第一种方法:session_set_cookie_params 函数原型 voi...2016-11-25
  • jQuery ajax全局函数处理session过期后的ajax跳转问题

    这篇文章主要介绍了基于jQuery的全局ajax函数处理session过期后的ajax操作的相关资料,需要的朋友可以参考下...2016-06-12
  • jsp使用sessionScope获取session案例详解

    这篇文章主要介绍了jsp使用sessionScope获取session案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-29
  • C#实现简单获取及设置Session类

    这篇文章主要介绍了C#实现简单获取及设置Session类,涉及C#针对session的设置及获取的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • asp.net中穿透Session 0 隔离(二)

    上一篇我们已经对Session 0 隔离有了进一步认识,如果在开发过程中确实需要服务与桌面用户进行交互,可以通过远程桌面服务的API 绕过Session 0 的隔离完成交互操作...2021-09-22
  • Node.js刷新session过期时间的实现方法推荐

    下面小编就为大家带来一篇Node.js刷新session过期时间的实现方法推荐。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • PHP session并发及session读写锁分析

    关于PHP session并发及session读写锁问题估计各大程序员都不会想到这个问题,因为一般情况我们不会使用session来做并发操作了,但有时也有可能用到,下面整理一个session并...2016-11-25
  • Nodejs中session的简单使用及通过session实现身份验证的方法

    session的本质使用cookie来实现。本文给大家介绍Nodejs中session的简单使用及通过session实现身份验证的方法,对node.js session相关知识感兴趣的朋友一起学习吧...2016-02-09
  • php中session引起错误问题集锦与解决办法

    php中session经常会出现一些很奇怪的问题,这些问题很多都是小细节的事情,对于php 初学者来说可能很难发现是什么原因,今天我们把几乎所有的session引起或出现的问题收集...2016-11-25
  • PHP中对Session和Cookie的使用例子

    Session和Cookie的使用在php中非常常见的了,我们通常用于登录双验证了,下文小编为各位介绍利用Session和Cookie来做一些像用户登录验证、记录用户浏览历史,存储购物车数...2016-11-25
  • PHP实现Session入库/存入redis的方法

    本篇文章主要介绍了PHP实现Session入库存入redis的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...2017-05-08
  • php中session学习笔记

    Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。从上述的定义中我们可以看到,Session实际上是一个...2016-11-25