Php uygulaması ve Java EE uygulama arasındaki oturumu paylaşmak nasıl?

3 Cevap php

Biz Java EE uygulaması ile bir PHP uygulaması yerini alabilir, ancak sorun biz iki apps gelir tek tek, birlikte var ve birbirleri ile iletişim kurmak istiyorum modüllerini yerine istiyorum değildir.

Bu yüzden 2 uygulamalar arasında kullanıcı oturumu paylaşmak mümkün mü? Ya da sorunu çözmek için bir çerez kullanabilir?

3 Cevap

Ile bir veritabanına oturum verileri kaydetmek session_set_save_handler().

UPDATE Efficiency wise it would be very mininal, the difference from reading a text file to querying a database (presumably using an existing connection).

(Ben kullanmak ne basitleştirilmiş) bazı örnek kod

class Session {
    public function __construct() {
        session_start();       
        $this->clean();        
    }
    public function __destruct() {
        session_write_close();
    }
    public function open() {
        return TRUE;
    }    
    public function close() {
        return TRUE;
    }    
    public function read($id) {
        global $Database;
        if ($Database->select('session_data FROM sessions WHERE session_id="%s"', $id)) {
            list($data) = $Database->fetch(MYSQL_NUM);
            return $data;
        } else {
            return '';
        }
    }    
    public function write($id, $data) {
        global $Database;
        return $Database->replace('sessions SET session_id="%s", session_data="%s", session_updated=%d', array($id, $data, time()));
    }    
    public function destroy($id) {
        global $Database;
        $_SESSION = array();
        return $db->delete('sessions WHERE session_id="%s"', $id);
    }    
    public function clean($expire = 600) {
        global $Database;
        $Database->delete('FROM sessions WHERE session_updated<%d', $time - $expire);
        return TRUE;
    }
}
// Declare the functions to use:
session_set_save_handler(array('Session', 'open'), array('Session', 'close'), array('Session', 'read'), array('Session', 'write'), array('Session', 'destroy'), array('Session', 'clean'));
$Session = new Session;

Eğer her zamanki teknik $_SESSION['name'] = data; kullanarak oturum verilerine okuma / yazma yapabilirsiniz.

Sharing a regular Java EE session with PHP can be done very efficient and fast with PHP-java-bridge.

Bu çözüm, herhangi bir disk IO üretmek değil gibi bir veritabanı kullanılarak üstün performans sunuyor. Ayrıca PHP web sunucusu veya Java EE sunucu üzerinde herhangi bir değişiklik gerekmez. Sadece, bazı kod eklemek, yapılandırmak ve bitirdiniz.

Php-java-köprü kurma kafa karıştırıcı olabilir, ama bunu yapmak için nasıl biliyorsanız, sadece 10 dakikalık bir iş olabilir. Ben sadece kavram benim öz bir kanıtı olduğu gibi sana yemek kitabı çözümleri teslim edebilirsiniz:

  1. Download PHP-java-bridge dosyaları. Ben (gerekli jar dosyaları için) JavaBridgeTemplate610.zip indirilen ve gerekli örnekler için php-java-bridge_6.1.0_documentation.zip, php dosyası ve örnek kodunu içerir (oturum paylaşımı!).

  2. Java EE sunucu uzaktasınız "/ WEB-INF/lib /" koyarak sensin webapp "JavaBridge.jar", "php-script.jar" ve "php-servlet.jar" ekleyin.

  3. Eğer sunucular "/ web" dizini Java EE konum için bir "test.jsp" Ekle:

    <HTML>
    <TITLE>PHP and JSP session sharing</title>
    <BODY>
    <%
    
    
    javax.servlet.http.HttpSession $session = request.getSession();
    if($session.getAttribute("counter")==null) {
      $session.setAttribute("counter", new java.lang.Integer(1));
    }
    
    
    int $counter = ((java.lang.Integer)$session.getAttribute("counter")).intValue();
    out.println ("HttpSession variable \"counter\": " + $counter + "<br>");
    java.lang.Integer $next = new java.lang.Integer($counter+1);
    session.setAttribute("counter", $next);
    %>
    <a href="http://127.0.0.1/test.php">PHP page</a>
    </BODY>
    </HTML>
    
  4. Bu Java EE sunucusuna iletişim kurmak için PHP tarafından kullanılan böylece JavaBridge servlet yapılandırın. Sadece sen web.xml aşağıdaki satırları ekleyin:

    <servlet>
      <servlet-name>PhpJavaServlet</servlet-name>
      <servlet-class>php.java.servlet.PhpJavaServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>PhpJavaServlet</servlet-name>
      <url-pattern>*.phpjavabridge</url-pattern>
    </servlet-mapping>
    
  5. Size "test.php" adlı bir dosya ekle web sunucusu kök konum ve Web.xml yapılandırıldığı gibi doğru Javabridgeservlet işaret JAVA_HOSTS ve JAVA_SERVLET düzenlemek emin olun.

    <?php
    define ("JAVA_HOSTS", "127.0.0.1:8084");
    define ("JAVA_SERVLET", "/JavaBridge.phpjavabridge");
    
    
    require_once("java/Java.inc");
    $session = java_session();
    ?>
    
    
    <HTML>
    <TITLE>PHP and JSP session sharing</title>
    <BODY>
    <?php
    if(is_null(java_values($session->get("counter")))) {
      $session->put("counter", 1);
    }
    $counter = java_values($session->get("counter"));
    print "HttpSession variable \"counter\": $counter<br>\n";
    $session->put("counter", $counter+1);
    ?>
    <a href="http://127.0.0.1:8084/test.jsp">JSP page</a>
    </BODY>
    </HTML>
    
  6. Gerekli "java.inc" php dosyası içerir takın. Siz src.zip indirilen "php-java-bridge_6.1.0_documentation.zip" in dosyası bulacaksınız. "/ Java" dizinine (sadece bu bir php dosya!) In "java.inc" dosyasını kopyalayın.

  7. Yeniden Uygulama sunucusu

  8. Dnm.php komut başlatın (örnek Goto için: http://127.0.0.1/test.php)

Geri jsp ve php dosyasına linklere tıklarsanız, göreceksiniz sayaç hisse JSP ve PHP hem de arasındaki Java oturumu ki!

In order to share the same JSession cookie in a JSP/Servlet and PHP they both need to run on the same domain name (also make sure that JAVA_HOSTS is the PHP file uses the same domain name!).

Eğer Reçine içine bağlıdır, ve bir Java EE uygulama sunucusu üzerinde PHP kodu çalıştırmak için izin verir Quercus hangi isimli bakmak istiyorum, ve belki bir seçenek 2 platformları arasında bazı iletişim sağlar.