Home  >  Article  >  Backend Development  >  Introduction to the method of reading session across php cross-domain, cross-subdomain, and cross-server

Introduction to the method of reading session across php cross-domain, cross-subdomain, and cross-server

WBOY
WBOYOriginal
2016-07-25 09:00:021392browse
  1. ini_set('session.cookie_path', '/');
  2. ini_set('session.cookie_domain', '.mydomain.com');
  3. ini_set('session.cookie_lifetime', '1800');
Copy the code

2. Set in php.ini

  1. session.cookie_path = /

  2. session.cookie_domain = .mydomain.com

  3. session.cookie_lifetime = 1800

Copy code

3. Call the function at the beginning of the php page (same condition as 1)

  1. session_set_cookie_params(1800, '/', '.mydomain.com');
Copy code

These three methods have the same effect.

Here I use the first method to set up and test on two domain names: www.mydomain.com and sub.mydomain.com. sub1.php

  1. //Set the page you visit first
  2. ini_set('session.cookie_path', '/');
  3. ini_set('session.cookie_domain', '.mydomain .com');
  4. ini_set('session.cookie_lifetime', '1800');

  5. //

  6. session_set_cookie_params(1800, '/', '.mydomain.com');
  7. session_start ();
  8. $_SESSION['sub1'] = 'sub1';
  9. print_r($_SESSION);
  10. ?>

Copy code

sub2.php

  1. session_set_cookie_params(1800, '/', '.mydomain.com');
  2. session_start();
  3. $_SESSION['sub2'] = 'sub2';
  4. print_r($_SESSION );
  5. ?>
Copy code

Access sequence: (1)www.mydomain.com/sub1.php Page output: Array ([sub1] => sub1)

(2)sub.mydomain.com/sub2.php Page output: Array ( [sub1] => sub1 [sub2] => sub2 )

Success

The second goal can be achieved by using a database to save SESSION data, so that each server can easily access the same data source and obtain the same SESSION data; or through file sharing, such as NFS (my other articles How to configure nfs) If you use a database to store session data, there may be remaining problems. That is, if the website has a large number of visits, SESSION reading and writing will frequently operate on the database. You can put this in memcache. Stored in the database, there are previous articles that have been implemented. The idea of ​​combining database and memcache has been discussed before. If it is not good to use memcache alone to store sessions, it is best to combine it with the database.

2) Cross-domain solution Idea: Use iframe to solve it, but ff does not support it, so you need to add the p3p protocol in front.

P3P (Platform for Privacy Preferences Project) is a protocol that declares it is a good guy and allows the collection of browser user behavior. But in reality, everyone can say that they are good people, and they may be doing bad things behind their backs. This is where the disagreement lies. [Reference] Most domestic websites do not pay attention to this P3P. Privacy issues may not be taken as seriously as foreign countries (Microsoft's privacy statement).

The first thing that comes to mind is to operate cookies through JS and allow cookies from two different domains to access each other, so that the above effect can be achieved.

The following is the specific implementation process, divided into two steps: 1. After successfully logging in under system A, use JS to dynamically create a hidden iframe, and use the src attribute of the iframe to redirect the cookie value under domain A as a get parameter to the b.jsp page under system B;

  1. var _frm = document.createElement("iframe");
  2. _frm.style.display="none";
  3. _frm.src = "http://bbs.it-home.org/setcookie.php ?mycookie=xxxxx";//The best encoding of xxx here is
  4. document.body.appendChild(_frm);
Copy the code

2. Get the information passed in system A in the setcookie.php page of system B Cookie value passed over, and the obtained value is written into the user's cookie. Of course, the domain is its own, so that cross-domain cookie access is simply realized; However, there is a problem that needs attention, that is, when browsing in IE This operation cannot be successful under the server. You need to set the P3P HTTP Header in the setokokie.php page (for specific details, please refer to: http://www.w3.org/P3P/). The P3P setting code is:

  1. header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');//This is how ecshop is set up
Copy code


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn