Hướng dẫn php multiple sessions on same browser - php nhiều phiên trên cùng một trình duyệt

Tôi mới dùng PHP, tôi đọc các bài viết khác mà không tìm thấy câu trả lời mà tôi đang tìm kiếm, nhưng vẫn không biết liệu những gì tôi muốn làm có ý nghĩa hay không.

Tôi đang sử dụng Php 7.

Trang xác thực người dùng của tôi, kiểm tra thông tin đăng nhập và sau đó thực thi session_start[], tạo phía máy chủ phiên và phía máy khách cookie trong trình duyệt.

Sau đó, trang khác của ứng dụng web gọi session_start[] để tiếp tục thông tin phiên, trong trường hợp này kiểm tra cookie. Mọi thứ đều hoạt động tốt cho đến nay ... ít nhất là khi tôi có một thông tin đăng nhập.

Tôi muốn có thể có nhiều hơn một người dùng đăng nhập cùng một trình duyệt [ví dụ trên tab khác.] Sử dụng cookie. Tôi không muốn nối ID phiên vào URL.

Tôi đã quản lý để tạo phiên khác nhau ở phía máy chủ bằng cách sử dụng session_id[] trước session_start[] trong trang xác thực dựa trên tên người dùng, nhưng vấn đề nằm ở phía máy khách.

Đăng nhập thành công đầu tiên [session_start[]] tạo cookie và đăng nhập thứ hai cập nhật cùng một cookie làm hỏng phiên được tạo trước đó.

Do đó, khi tiếp tục phiên, session_start[] sẽ chỉ tiếp tục phiên cuối cùng, trộn dữ liệu lấy từ DB dựa trên thông tin phiên.

Có cách nào để tạo session_start[] tạo cookie cho mỗi lần đăng nhập và làm cho PHP tiếp tục đúng phiên bằng cookie không?

Bất kỳ ý tưởng?

Thông tin chi tiết: Tôi đang cập nhật một ứng dụng Legacy cố gắng khắc phục một số vấn đề bảo mật. Sự cần thiết của nhiều phiên đến từ các mục đích quản trị nơi các quản trị viên truy cập cùng một trang web. Lý do tại sao cần một sự phân tách phiên là tùy thuộc vào thông tin phiên, dữ liệu được tìm nạp từ một cơ sở dữ liệu khác. Do đó, việc sử dụng thường xuyên sẽ chỉ cần một phiên cho mỗi người dùng, nhưng quản trị viên anh ta cần thực hiện nhiều thông tin đăng nhập xem dữ liệu khác nhau tùy thuộc vào thông tin đăng nhập đó.

08-11-2004

2,187,25 25

Ngày tham gia: tháng 12 năm 2003

Hoạt động cuối cùng: 2 tháng 10 năm 2017, 12:19 tối EDT

Vị trí: /dev /null

Bài viết: 2.187

Cảm ơn đã cho: 3

Cảm ơn 25 lần trong 23 bài viết

Nhiều phiên PHP trong cùng một phiên bản trình duyệt

Kính thưa tất cả.....

Tôi hiện đang viết một ứng dụng cơ sở trợ giúp / kiến ​​thức bằng cách sử dụng PHP / PostgreSQL.

Tôi xác thực người dùng bằng cách sử dụng một cơ chế cookie khá phức tạp. Vấn đề là sử dụng cookie [tôi cũng có phiên bản sử dụng các phiên có cùng một vấn đề], tôi dường như chỉ có thể nhận được một người dùng đăng nhập từ bất kỳ một phiên bản trình duyệt nào. .

Ví dụ, giả sử tôi kích hoạt Firefox và đăng nhập vào ứng dụng của mình. Một phiên được bắt đầu cho trình duyệt. Tôi mở một tab khác và đăng nhập với tư cách là người dùng khác, phiên [và bất kỳ biến phiên nào] được "ghi đè" bởi phiên mới này.

Tôi đã thực hiện một cách giải quyết trong thời điểm hiện tại, bằng cách viết địa chỉ IP và tên người dùng vào bảng và chỉ cho phép một đăng nhập từ bất kỳ một địa chỉ IP nào. Vấn đề ở đây là nếu người dùng quên đăng xuất, thì session_destroy [] [hoặc làm sạch cookie thủ công, tùy thuộc vào phiên bản ứng dụng của tôi] không bao giờ được gọi và khi tôi triển khai điều này, người dùng sẽ gọi DBA/SA [ Tôi!] Và tôi phải xóa khỏi ip_addr trong đó username = 'blah' và ip_addr = 'xxx.xxx.xxx.xxx' để loại bỏ mục nhập và xóa khóa - điều mà tôi không muốn làm cho 150 người dùng !!!!

Nói tóm lại, có ai biết một cách để cho phép nhiều phiên độc lập với ID phiên độc lập từ phiên bản * cùng * của trình duyệt không?

Mọi sự trợ giúp sẽ rất được trân trọng. Nếu không, tôi vẫn có thể gắn bó với phương thức một login-per-per-IP của mình, vì tất cả các máy khách của chúng tôi sử dụng các địa chỉ IP khác nhau và proxy được bỏ qua trên mạng cục bộ.greatly appreciated. If not, I can still stick to my one-login-per-IP method, as all our clients use different IP addresses and the proxy is bypassed on the local network.

Ray Paseur

unread,

Ngày 4 tháng 9 năm 2009, 3:44:04 AM9/4/099/4/09

Đến Washington, DC PHP Developers Group

Đồng nghiệp: & nbsp; Đây là một kịch bản. & Nbsp; Tôi sẽ hoan nghênh những gợi ý của bạn về cách đối phó với câu hỏi hóc búa này.

1. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Mở cửa sổ trình duyệt và truy cập một trang web đặt cookie phiên PHP.       Open a browser window and go to a web site that sets a PHP session cookie.

2. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Mở một cửa sổ trình duyệt khác và truy cập cùng một trang web. & NBSP; Trình duyệt của bạn trình bày cookie.       Open another browser window and go to the same site.  Your browser presents the cookie.

3. & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Bây giờ bạn có hai cửa sổ máy khách với cùng một phiên.       Now you have two client windows with the same session.

Mặc dù thực tế là hành vi mong đợi này [trình duyệt gửi cookie, eh!] Tôi tự hỏi liệu có một số quy trình tôi có thể làm, phía máy chủ, để phân biệt giữa hai cửa sổ trình duyệt này. & NBSP; Có thể một cái gì đó với session_name []? & Nbsp; Điều gì về chuyển đổi giữa các trang trong mỗi cửa sổ trình duyệt? & NBSP; Làm thế nào máy chủ có thể giữ tên phiên thẳng?

Điều này chủ yếu là giả thuyết, vì vậy xin vui lòng không mất ngủ. & NBSP; Nhưng nếu bạn đã có một cảm hứng hoặc nếu bạn đã xử lý điều này trước đây, xin vui lòng cho tôi biết. & NBSP; Bất kỳ ý tưởng nào đều được chào đón. & NBSP; Cảm ơn,

cá đuối

Barry Austin

unread,

Ngày 4 tháng 9 năm 2009, 3:46:38 AM9/4/099/4/09

đến nhóm phát triển Ray Paseur, Washington, DC PHP

Giải pháp đầu tiên xuất hiện trong tâm trí là nhúng một không [mã thông báo một lần ngẫu nhiên] trong trang, như trong trường biểu mẫu ẩn. Đây là cùng một kỹ thuật được sử dụng để bảo đảm chống lại các cuộc tấn công CSRF [a.k.a. "mã thông báo chống CSRF"].

Barry

Ray Paseur

unread,

Ngày 4 tháng 9 năm 2009, 3:57:02 AM9/4/099/4/09

Đến nhóm phát triển Barry Austin, Washington, DC PHP

Barry: Có, và điều đó có ý nghĩa, nhưng trang trình duyệt sẽ phải gửi người không phải mỗi lần để máy chủ nhận ra nó một cách nhất quán, phải không? & NBSP; Dường như với tôi rằng nếu có một hình thức trên mỗi trang thì nó sẽ hoạt động tốt, nhưng không có biểu mẫu, cookie là người duy nhất không có trong thị trấn. & NBSP; Hay tôi đang thiếu một cái gì đó? & NBSP;

jproffer

unread,

Ngày 4 tháng 9 năm 2009, 4:15:26 AM9/4/099/4/09

đến nhóm phát triển Ray Paseur, Washington, DC PHP

Giải pháp đầu tiên xuất hiện trong tâm trí là nhúng một không [mã thông báo một lần ngẫu nhiên] trong trang, như trong trường biểu mẫu ẩn. Đây là cùng một kỹ thuật được sử dụng để bảo đảm chống lại các cuộc tấn công CSRF [a.k.a. "mã thông báo chống CSRF"].

Barry Austin

unread,

Ngày 4 tháng 9 năm 2009, 3:46:38 AM9/4/099/4/09

đến nhóm phát triển Ray Paseur, Washington, DC PHP

Giải pháp đầu tiên xuất hiện trong tâm trí là nhúng một không [mã thông báo một lần ngẫu nhiên] trong trang, như trong trường biểu mẫu ẩn. Đây là cùng một kỹ thuật được sử dụng để bảo đảm chống lại các cuộc tấn công CSRF [a.k.a. "mã thông báo chống CSRF"].

Barry

Ngày 4 tháng 9 năm 2009, 3:57:02 AM9/4/09

unread,

Đến nhóm phát triển Barry Austin, Washington, DC PHP9/4/09

Barry: Có, và điều đó có ý nghĩa, nhưng trang trình duyệt sẽ phải gửi người không phải mỗi lần để máy chủ nhận ra nó một cách nhất quán, phải không? & NBSP; Dường như với tôi rằng nếu có một hình thức trên mỗi trang thì nó sẽ hoạt động tốt, nhưng không có biểu mẫu, cookie là người duy nhất không có trong thị trấn. & NBSP; Hay tôi đang thiếu một cái gì đó? & NBSP;

jproffer
pseudo-session onto every link. see if there is already a $_GET var for
that pseudo-session, create random one if not, and pass them through every
link.

Ngày 4 tháng 9 năm 2009, 4:15:26 AM9/4/09
because it's an ugly and inelegant solution for production.

Theo như tôi biết, không có cách nào đáng tin cậy để làm điều này. & NBSP; Không có cách nào để phân biệt giữa hai tab trình duyệt mở hoặc cửa sổ trình duyệt. & NBSP; Có thể JavaScript có thể trích xuất PID cho cửa sổ, nhưng bất cứ điều gì có thể thay đổi phía máy khách. & NBSP; Tại sao bạn cần phải lo lắng về 2 cửa sổ trình duyệt khác nhau trên cùng một máy?
Kevin Bruce
Designer/Developer

//www.kevinbruce.com

jproffer

unread,

Ngày 4 tháng 9 năm 2009, 4:15:26 AM9/4/099/4/09

Theo như tôi biết, không có cách nào đáng tin cậy để làm điều này. & NBSP; Không có cách nào để phân biệt giữa hai tab trình duyệt mở hoặc cửa sổ trình duyệt. & NBSP; Có thể JavaScript có thể trích xuất PID cho cửa sổ, nhưng bất cứ điều gì có thể thay đổi phía máy khách. & NBSP; Tại sao bạn cần phải lo lắng về 2 cửa sổ trình duyệt khác nhau trên cùng một máy?

Ngày 4 tháng 9 năm 2009, 4:32:18 AM9/4/09

Những gì tôi đã đề cập chỉ áp dụng cho một trang với một biểu mẫu sau đó được gửi qua bài đăng. Đối với các phiên con liên tục, tôi sẽ xem xét sử dụng ID phiên phụ được truyền qua GET [tham số URL] hoặc POST [Trường biểu mẫu ẩn] cho loại trang tương ứng.

Ray Paseur

unread,

B9/4/09

Kevin Bruce

Ngày 4 tháng 9 năm 2009, 4:47:44 AM9/4/09

Đến Barry Austin, Ray Paseur, Washington, DC PHP Development Group

1. Khách hàng truy cập máy chủ/đường dẫn/trang. Không có cookie phiên tồn tại. Script session_start [] đặt cookie phpsessid. 2. Khách hàng thực hiện một số thứ ảnh hưởng đến nội dung của $ _Session. 3. Khách hàng mở cửa sổ khác và truy cập máy chủ/đường dẫn/otherPage. Trình duyệt gửi cookie phpsessid. 4. script session_start [] sử dụng id session-id từ cookie phpsessid và tải dữ liệu phiên, trình bày /path /otherPage với mảng $ _session từ bước [2].
2. Client does some stuff that affects the contents of $_SESSION.
3. Client opens another window and visits server/path/otherpage. Browser sends PHPSESSID cookie.
4. Script session_start[] uses session-id from PHPSESSID cookie and loads the session data, presenting /path/otherpage with the $_SESSION array from step [2].

Không thể là vấn đề trên nhiều hơn một máy tính và không thể là vấn đề với các trình duyệt khác nhau [tức là FF và IE sử dụng các lọ cookie khác nhau], vì vậy trong "thế giới thực", nó không phải là vấn đề.

Cảm ơn tất cả các ý tưởng cho bạn, Ray
Ray

David Walker

unread,

Ngày 4 tháng 9 năm 2009, 6:21:33 AM9/4/099/4/09

đến nhóm phát triển Ray Paseur, Washington, DC PHP

Trên Thu, ngày 3 tháng 9 năm 2009 lúc 1:44 chiều, Ray Paseur đã viết: wrote:

 

Câu hỏi về cách nhận nhiều cửa sổ/tab trình duyệt để sử dụng các phiên khác nhau


Tôi đã muốn làm điều này khá lâu, vì vậy tôi chỉ nghĩ về nó trong 20 giây và đây là mã psuedo của tôi dành cho bạn. & NBSP; Nó khá an toàn, mặc dù tôi không nghĩ rằng nó có quy mô tốt, đối với các hệ thống lớn mà bạn có nguy cơ xung đột trong setNextSessionId []. & Nbsp; Bạn thấy những gì nó đang làm, tôi chắc chắn bạn có thể chơi xung quanh để làm cho nó 'ổn định hơn'.

Hi vọng điêu nay co ich

--Dave
Dave

B
global $local_session;  // use instead of $_SESSION
global $session;        // session manager

lớp app_session {& nbsp; & nbsp; & nbsp; var $ current_id = null; & nbsp; & nbsp; & nbsp; var $ next_id = null;
    var $current_id = null;
    var $next_id = null;

& nbsp; & nbsp; & nbsp; hàm app_session [] {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; $ this-> current_id = $ _cookie ['next_id']; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; $ this-> setNextSessionId []; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; $ this-> getSessionContainer []; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; $ this-> writecookie []; & nbsp; & nbsp; & nbsp; }
        $this->current_id = $_COOKIE['next_id'];
        $this->setNextSessionId[];
        $this->getSessionContainer[];
        $this->writeCookie[];
    }

& nbsp; & nbsp; & nbsp; hàm setNextSessionId [] {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; while [true] {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; $ id = md5 [uniqid [getmypid [], 1]]; // *Chỉ nix, sử dụng getMicRotime [] cho windows & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; if [! isset [$ _ phiên [$ id]]] {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; phá vỡ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; } & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; } & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; $ this-> next_id = $ id; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; $ _Session [$ this-> next_id] = true; // Ngăn chặn một cuộc xung đột có thể xảy ra trong sự kiện 2 MD5 là giống nhau & nbsp; & nbsp; & nbsp; }
        while [true] {
            $id = md5[uniqid[getmypid[], 1]]; // *NIX only, use getMicroTime[] for windows
            if [!isset[$_SESSION[$id]]] {
                break;
            }  
        }  
        $this->next_id = $id;
        $_SESSION[$this->next_id] = true; // Prevent a possible conflict in the event 2 md5's are the same
    }

& nbsp; & nbsp; & nbsp; hàm getSessionContainer [] {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Toàn cầu $ local_session; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; $ local_session = & $ _Session [$ current_id]; & nbsp; & nbsp; & nbsp; }
        global $local_session;
        $local_session =& $_SESSION[$current_id];
    }

& nbsp; & nbsp; & nbsp; function writecookie [] {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; setCookie ['next_id', $ this-> next_id]; & nbsp; & nbsp; & nbsp; }
        setcookie['next_id', $this->next_id];
    }

& nbsp; & nbsp; & nbsp; chức năng cập nhật [] {& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; $ _Session [$ this-> next_id] = $ _session [$ this-> current_id]; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; unset [$ _ phiên [$ this-> current_id]]; & nbsp; & nbsp; & nbsp; } & nbsp; & nbsp; }
        $_SESSION[$this->next_id] = $_SESSION[$this->current_id];
        unset[$_SESSION[$this->current_id]];
    }  
}

// giả vờ ứng dụng của bạn ở bên dưới ////mã thiết lập
//
// setup code

$ session = new app_session []; register_shutdown_function [mảng [$ session, 'cập nhật']];
register_shutdown_function[array[$session, 'updateSession']];

// Mã ứng dụng của bạn sử dụng $ local_session $ local_session ['foo'] = 'Bar';?>
$local_session['foo'] = 'bar';
?>

Ray Paseur

unread,

Ngày 4 tháng 9 năm 2009, 6:48:59 AM9/4/099/4/09

Đến David Walker, Washington, DC PHP Developers Group

Mát mẻ! & Nbsp; Bạn có xem xét việc đưa ra điều này cho Keith để xem xét mã không?

Rất cám ơn, ~ tia

Đã gửi: Thứ Năm, ngày 03 tháng 9 năm 2009 4:22 PMTO: Ray Paseur Thursday, September 03, 2009 4:22 PM
To: Ray Paseur

David Walker

unread,

Ngày 4 tháng 9 năm 2009, 6:21:33 AM9/4/099/4/09

đến nhóm phát triển Ray Paseur, Washington, DC PHP

Sure?

Trên Thu, ngày 3 tháng 9 năm 2009 lúc 1:44 chiều, Ray Paseur đã viết:

Câu hỏi về cách nhận nhiều cửa sổ/tab trình duyệt để sử dụng các phiên khác nhau

Tôi đã muốn làm điều này khá lâu, vì vậy tôi chỉ nghĩ về nó trong 20 giây và đây là mã psuedo của tôi dành cho bạn. & NBSP; Nó khá an toàn, mặc dù tôi không nghĩ rằng nó có quy mô tốt, đối với các hệ thống lớn mà bạn có nguy cơ xung đột trong setNextSessionId []. & Nbsp; Bạn thấy những gì nó đang làm, tôi chắc chắn bạn có thể chơi xung quanh để làm cho nó 'ổn định hơn'.

--Dave
Dave

David Walker

unread,

Hi vọng điêu nay co ich9/5/09

đến nhóm phát triển Ray Paseur, Washington, DC PHP

Trên Thu, ngày 3 tháng 9 năm 2009 lúc 1:44 chiều, Ray Paseur đã viết: wrote:

 

Câu hỏi về cách nhận nhiều cửa sổ/tab trình duyệt để sử dụng các phiên khác nhau



Tôi đã muốn làm điều này khá lâu, vì vậy tôi chỉ nghĩ về nó trong 20 giây và đây là mã psuedo của tôi dành cho bạn. & NBSP; Nó khá an toàn, mặc dù tôi không nghĩ rằng nó có quy mô tốt, đối với các hệ thống lớn mà bạn có nguy cơ xung đột trong setNextSessionId []. & Nbsp; Bạn thấy những gì nó đang làm, tôi chắc chắn bạn có thể chơi xung quanh để làm cho nó 'ổn định hơn'.

Hi vọng điêu nay co ich

--Dave
Dave

Vì vậy, tôi đã suy nghĩ nhiều hơn về "giải pháp" của mình và nó thất bại. & Nbsp; Tất nhiên tôi đang dựa vào thực tế là các cửa sổ / tab khác nhau gửi cookie mà họ lấy lại từ máy chủ. & NBSP; Nhưng nếu đó là sự thật, thì chúng tôi có thể có một số liên kết trên một trang có nội dung "Bắt đầu một phiên mới" thì hãy sử dụng mã của tôi để làm việc. & NBSP; Tuy nhiên, vì trình duyệt gửi cookie được cập nhật nhất về cái tên đó, ý tưởng của tôi thất bại.

Tuy nhiên, những gì tôi có thể được thực hiện để hoạt động nếu bạn sử dụng URL khác nhau cho các phần khác nhau trong ứng dụng của bạn. & NBSP; app.site.com và App-Manager.site.com, chúng tôi chỉ có thể thay đổi bit getSessionContainer của mã để làm điều này:

hàm getSessionContainer [] {& nbsp; Toàn cầu $ local_session;
  global $local_session;

 

if [stristr [$ _ server ['http_host'], 'app-manager']] {& nbsp; & nbsp; & nbsp; $ local_session = & $ _Session ['Manager']; & nbsp; } other {& nbsp; & nbsp; & nbsp; $ local_session = & $ _Session ['public']; & nbsp; }}
    $local_session =& $_SESSION['manager'];
  } else {
    $local_session =& $_SESSION['public'];
  }
}

Tôi nghĩ rằng điều đó sẽ cho phép các ứng dụng dựa trên URL khác nhau chia sẻ không gian phiên [và cùng một sessid], nhưng có các thùng chứa phiên riêng biệt.

--Dave
Dave

Dano

unread,

Ngày 5 tháng 9 năm 2009, 1:53:04 AM9/5/099/5/09

Đến Washington, DC PHP Developers Group

Tôi hiểu đây chỉ là lý thuyết, nhưng tại sao yêu cầu điều này hoàn toàn là phía máy chủ? Tôi nghĩ rằng JPROFFER đang đi đúng hướng với một giải pháp JavaScript. Vì chúng ta đang nói về Windows trình duyệt, có vẻ như phía khách hàng nhất thiết phải thực hiện một số công việc. Tất nhiên, bất cứ điều gì khách hàng gửi đều bị nhiễm độc và không thể được sử dụng một cách an toàn mà không cần xác thực, nhưng điều đó bao gồm chính session_id để tôi không thấy việc chấp nhận một cookie hoặc tham số do JavaScript tạo ra như thế nào là rủi ro bảo mật bổ sung.
this be strictly server side? I think jproffer is on the right track
with a javascript solution. Since we're talking about browser
windows, it seems like the client side necessarily has to do some of
the work. Of course, anything the client sends is tainted and can't be
used safely without validation, but that includes the session_id
itself so I don't see how accepting an additional javascript generated
cookie or parameter is an additional security risk.

Còn những thứ như thế này thì sao?

Cửa sổ Một khách hàng: Xin chào, Máy chủ. Máy chủ: Này, khách hàng. Đây là cookie ID phiên của bạn. Khách hàng: Cảm ơn. *Máy khách JS tạo ra Pseudo-Unique Rand [] window_id * *[Nếu bạn hơi hoang tưởng, máy khách cũng biết băm của phiên và cửa sổ ID] Như Args, ... Cập nhật HTML dựa trên phản hồi** Máy chủ và máy khách tiếp tục thực hiện việc của họ cùng nhau thông qua AJAX thay vì tải trang đầy đủ*
client: Hello, server.
server: Hey, client. Here's your session id cookie.
client: Thanks.
*client js generates pseudo-unique rand[] window_id*
*[if your a bit paranoid, client also bakes a hash of the session and
window ids]*
*client js makes ajax call to server with window_id, session_id [&
possibly hash] as args, ...updates html based on response*
*server and client continue do their thing together via ajax rather
than full page loads*

Window B Client: Xin chào, Máy chủ Đây là ID phiên từ Window A. Server: Cái gì, không có Window_ID? Chắc bạn là người mới ở đây. Khách hàng: Cảm ơn. Vâng, tôi có thể gửi cho bạn một trong những window_ids đó. Gimme một giây. *Máy khách này JS tạo ra Window [] Window_id, Ajax Thing, v.v.
client: Hello, server here's that session id from Window A.
server: What, no window_id? You must be new here.
client: Thanks. Yeah, I can send you one of those window_ids. Gimme a sec.
*this client js generates new pseudo-unique rand[] window_id, does
ajax thing, etc*

Tôi đã không thử điều này, nhưng có vẻ như sẽ có hai cuộc trò chuyện máy khách khác nhau đang diễn ra? Tôi sẽ không mong đợi JavaScript trong Window A sẽ biết bất cứ điều gì về Window_id trong Window B và ngược lại.
distinct client-server conversations going on? I wouldn't expect the
javascript in Window A would know anything about the window_id in
Window B, and vice versa.

David Walker

unread,

Ngày 5 tháng 9 năm 2009, 9:25:58 AM9/5/099/5/09

đến nhóm phát triển Dano, Washington, DC PHP

Tôi không chắc chắn 100% nhưng tôi tin rằng không gian JS được chia sẻ giữa các trường hợp và ít nhất, nó không được lưu vào nhấp vào nhấp vào Trang. & NBSP; Tuy nhiên, tôi có thể quan tâm đến việc này nhiều hơn tôi nên có, và bây giờ muốn trình bày logic thực sự làm việc. & NBSP; Thay vào đó, nó hoạt động trên công cụ của chúng tôi [có lẽ là những thứ chết tiệt khác nhưng không sao cả]

Vì vậy, nhìn lại năm 2002, _Session sẽ không hỗ trợ các khóa số và sẽ không bao giờ. & NBSP; Hầu hết các trường hợp Apache đều chấp nhận cú pháp URL như vậy:

//www.site.com/index.php/23456?i=2&foo=bar

Ở đầu máy chủ, trước khi bạn bắt đầu phiên của mình và trước khi bạn làm hầu hết mọi thứ, hãy chọn các chữ số cuối cùng của PHP_elf bằng cách sử dụng mẫu Regex của bạn [tôi thích & nbsp; s/[[0-9] {5}].* \ ??/& nbsp; - Tìm 5 chữ số trước lần đầu tiên? [Khá không phổ biến]. & NBSP;

  11 function convertNumbersToChar [$in] {
  12 >---$len = strlen[$in];
  13 >---for [$i = 0; $i < $len; $i++] {
  14 >--->---$ret[$i] = chr[ord[$in[$i]]+17];
  15 >---}
  16 >---$ret = implode[$ret];
  17 >---return $ret;
  18 }

Bây giờ lưu trữ giá trị trả về đó là $ globals ['page_session_number']; & nbsp; Sau đó chạy tập lệnh SED nhanh qua ứng dụng của bạn để cập nhật mã $ _Session của bạn

tìm thấy . -type f -exec sed -i 's/\ $ _ phiên/\ $ _ phiên \ [\ $ globals \ ["page_session_number" \] \]/' {} \;

Bây giờ hãy cẩn thận để sử dụng $ _Server ['php_elf']; khi xây dựng các liên kết, hoặc tiêu đề-redirects. & nbsp; Vì điều đó chứa các tab của bạn "số ma thuật" của bạn sẽ được tách biệt.

Bây giờ, một lần và mãi mãi, có một giải pháp!

--Dave
Dave

Hans Lellelid

unread,

Ngày 6 tháng 9 năm 2009, 7:28:05 AM9/6/099/6/09

đến Ray Paseur, Jproffer ,, Barry Austin, Washington, DC PHP Development Group

Chào Ray,

> Không và sẽ không bao giờ là một môi trường sản xuất. Chỉ là một bài tập trí tuệ> để xem liệu có nhiều điều này hơn là bắt mắt ...
> exercise to see if there is more to this than meets the eye...

Tôi nghĩ rằng có một lỗ hổng cơ bản với ý tưởng có các cửa sổ của ứng dụng * giống nhau * chạy trong các phiên khác nhau. Tôi khá tự tin rằng hoàn toàn không có cách nào để làm điều này [đáng tin cậy] trên máy chủ. Bất kỳ giải pháp nào cũng sẽ phải bao gồm phát hiện logicto của máy khách khi các windows/tab mới được mở và gửi một số mã thông báo đặc biệt. Infact, bạn sẽ phải quản lý các định danh phiên của mình từ phần rất thủ công trong mô hình này, vì bạn không thể có các phiên PHP khác nhau trong cùng một trình duyệt [cho cùng một URL].
multiple windows of the *same* application running in different sessions.
I'm pretty confident that there is absolutely no way to do this [reliably]
on the server alone. Any solution is going to have to include client logic
to detect when new windows/tabs are opened and send some special token. In
fact, you're going to have to manage your session identifiers from the
client very manually in this model, since you could not have different
concurrent PHP sessions in the same browser [for the same URLs].

Có một vài vấn đề cốt lõi: 1] Cookie phải là duy nhất theo tên, miền, đường dẫn. 2] Web không trạng thái, do đó, không có cách nào [trên máy chủ] đã cho biết ai đó chỉ cần nhấn làm mới trong một cửa sổ so với ai đó tạo ra một bản sao mới của trang trong một cửa sổ khác.
1] Cookies must be unique by name, domain, path.
2] The web is stateless, so there's no way [on the server] to
differentiate someone just hitting refresh in one window vs. someone
opening up a new copy of the page in another window.

Dù sao, bạn * có thể * làm điều này với một số lớp mã máy khách, nhưng tôi nghi ngờ rằng có thể có một cách tốt hơn để "rút ra" câu hỏi này. .
that there might be a better way to "unask" this question. [What is the
motivation for the question? -- maybe you mentioned it but I was distracted
by these suggestions of PHP code that do *not* solve this problem :]

Hans

Làm thế nào để các tab trình duyệt khác nhau các phiên trong PHP?

Để phân biệt giữa các tab, bạn chỉ cần kiểm tra $ _cookie ['tab_id'] trên máy chủ và lưu trữ các giá trị phiên một cách thích hợp.check $_COOKIE['tab_id'] on the server and store sessions values appropriately.

Làm thế nào có thể dừng nhiều đăng nhập trong cùng một trình duyệt với các tab khác nhau trong PHP?

Cách ngăn chặn nhiều đăng nhập trong cùng một trình duyệt bằng PHP..
User1 đã đăng nhập ...
User1 cố gắng mở loginindex. PHP trong tab mới ...
Nó hiển thị đăng nhập. Trang PHP thay vì đăng nhập trước đó vào trang [User1 đã đăng nhập] ....
Chấp nhận người dùng1 để đăng nhập lại với thông tin đăng nhập giống nhau/khác nhau .. trong cùng một trình duyệt ..

Chúng ta có thể bắt đầu hai phiên trong PHP không?

Câu trả lời là không".Bạn không thể bắt đầu nhiều phiên đồng thời.Và nếu bạn làm như vậy, bạn sẽ gặp một lỗi như "một phiên đã được bắt đầu".Bạn không cần bắt đầu các phiên đồng thời, vì vậy bạn có thể tạo nhiều khóa.You cannot start multiple sessions simultaneously. And if you do, you'll get an error like "A session had already been started". You don't need to start simultaneous sessions, so long you can create multiple keys.

PHP có thể xử lý bao nhiêu phiên?

Các phiên PHP là tệp [theo mặc định] dựa trên tệp, vì vậy bạn có thể có nhiều trong số chúng có thể phù hợp với đĩa của máy chủ của bạn.Lưu câu trả lời này.Hiển thị hoạt động trên bài viết này.Không, điều này chính xác có nghĩa là không thể có hơn 30 kết nối đồng thời.there can't be more than 30 simultaneous connections.

Bài Viết Liên Quan

Chủ Đề