문제

나는 CodeInter 시스템을 한동안 사용하고 있었지만 가지고 있습니다 이것의 짧은 혼란. 나는 그것이 가르쳐 준 것에 대해 감사하지만 이제는 새로운 비 코데이터 프로젝트를위한 도서관이 필요하므로 도서관에 올바른 것이 있고 그렇지 않은 아이디어를 찾고 있습니다. 내가 필요한 모든 것을 얻으려면 여러 도서관에서 조각을 가져와야 할 것입니다.

나는 방금 보았다 Kohana PHP 세션 라이브러리와 나는 데이터 액세스를 위해 $ this-> 세션으로 변경하는 대신 $ _session superglobal을 사용하는 기본 PHP 방법으로 돌아가는 방법을 좋아합니다.

어쨌든, 나는 다른 좋은 세션 라이브러리가 있는지 알고 싶었습니다. 기능적으로 crud 외에 세션에서 처리 해야하는 많은 것이 있습니다.

  • 비 쿠키 기반 세션 통과 지원 (즉, Facebook 또는 Flash 업로더)
  • 다음 페이지로드에 대해서만 지속 된 다음 자동 압수 된 "플래시 데이터".
  • 프로그래머가 기존 코드를 변경할 필요가 없도록 $ _session 또는 $ this-> 세션과 함께 작동합니다.
  • 페이지를 중간에 변경하려는 경우 새 세션 ID (예 : Session_ID ( 'New ID')) 설정을 지원합니다.
  • 데이터가 추가되거나 제거 될 때마다 페이지 요청 끝에서 모든 데이터를 저장합니다 (추가 DB 쿼리를 저장).
  • 스토리지를 위해 파일, 쿠키 또는 데이터베이스를 사용하여 지원합니다. (또는 memcached는 좋을 것입니다)
  • 세션 납치의 경우 액세스를 거부하려고 시도합니다. (IP, UserAgent, OR 지문)

방금 CodeIgniter 및 Kohana 세션 라이브러리의 논리를 다루는 데 시간을 보냈으며 각 페이지의 시작 및 종료 방법에 대해 다음과 같은 점을 생각해 냈습니다.

/**************
** Kohana Sessions
**************/
If not native file storage {
    session_set_save_handler to the storage type (DB, cache, cookie...)
}

set the session_name() so php knows what cookie value to check

start session

/****** Saving ******/

session_write_close() which calls the given handler


/**************
** CI Sessions
**************/

Try to read_session() -> {
    session = Get cookie (if using cookies will also contain data)

    if(database) { 
        session .= pull data from database
    }

    checks if valid...

    $this->userdata = session data

} else { 
    create a new one
}

/****** Saving ******/

session data is serialized either way

if(cookie) {
    save cookie with serialized data and params like "last_activity"
}
if(database) {
    save serialized data in db and session in cookie
}
도움이 되었습니까?

해결책

당신은 보았습니까? Zend_Session?

  • PHP 설정을 사용하여 URL을 통해 세션 식별자를 전달할 수 있습니다.
  • 시간 또는 홉으로 특정 세션 변수를 만료 할 수 있습니다 (요청)
  • 다른 앱으로의 마이그레이션은 그렇게 쉽지 않으며 엉망이 될 때별로 좋지 않다고 생각합니다. $_SESSION 당신이 사용할 때 Zend_Session
  • Zend_Session 세션 데이터를 저장하기위한 광고 기반 접근 방식이 있습니다. ㅏ 저장 핸들러 DBS의 경우 포함되지만 해당 아키텍처를 사용하면 사용자 정의 처리기를 통과 할 수 있습니다.
  • Zend_Session 유효성 검사기를 지원하여 세션의 유효성을 확인합니다. 여기에 우리는 당신이 확인을 위해 사용자 정의 객체를 전달할 수있는 개방형 아키텍처가 있습니다.
  • 세션을 잠글 수 있습니다. 일명 읽기 전용
  • 동일한 세션 네임 스페이스의 여러 인스턴스의 인스턴스화를 방지 할 수 있습니다.
  • 또한 발견해야 할 것이 더 많습니다 Zend_Session 세션 ID를 재생하는 것, remember-me-cookies 발행, 기억을 철회하는 등.

다른 팁

OK, 사용자 정의, 비-$ _ 세션 기반 CodeIgniter lib, 두 개의 Kohana와 Zend Libs ($ _session을 사용하는)와 다른 프로젝트의 다른 세션 라이브러리를 파헤친 후 나는 내 문제에 대한 답을 구축한다고 생각합니다. 위에 나열된 모든 것을 만족시키는 것 (플래시 데이터 제외).

코드는 다음과 같습니다 누구든지 자신의 라이브러리를 구축하는 동안 그것을 사용하거나 읽고 싶다면. 나는 모든 것을 철저히 설명하는 많은 의견을 남겼으며 그것에 대한 피드백을 좋아합니다. 기존 세션을 제거한 5 분마다 토큰, 플래시 기반 업 로더, 쿠키, 세션 재생 및 모든 데이터베이스, 파일 시스템, Memchache 또는 원하는 기타 양식에 세션을 저장하는 지원을 지원합니다. 세트.

보세요 zebra_session, PHP의 기본 세션 처리 기능을위한 래퍼, 스토리지 용 MySQL 사용

  • PHP의 기본 세션 처리 기능에 대한 래퍼 역할을하지만 세션 데이터를 플랫 파일에 저장하는 대신 MySQL 데이터베이스에 저장하여 더 나은 보안과 더 나은 성능을 제공합니다.

  • PHP의 기본 세션 핸들러에 대한 드롭 인 및 보이지 않는 교체품입니다. PHP 세션은 라이브러리를 사용하기 전에 동일한 방식으로 사용됩니다. 기존 코드를 변경할 필요가 없습니다!

  • 여러 동시 AJAX 요청이있는 시나리오에서 데이터가 올바르게 처리되도록 행 잠금을 구현합니다.

  • 하나의 파일 만

  • 성숙하고 최적화되고 끊임없이 개발되었습니다

  • 아주 좋은 문서

CI에서 사용할 수 있습니다. 반향.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top