承接 acidjazz/summon 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

acidjazz/summon

最新稳定版本:v1.4.3

Composer 安装命令:

composer require acidjazz/summon

包简介

Simply and securely handle your user sessions

README 文档

README

Simply and securely handle your user sessions

Latest Stable Version Total Downloads Latest Unstable Version License Gitter

what is this

this is just a simple secure way to set cookies and revive expired sessions for as long as you want. it also allows you to view and control all logged in sessions of a user and where they are coming from.

how it works

  • sets a cookie of an encoded string of some data when the user logs in.
  • stores stuff in the user model for better verification
  • upon our normal session expiring, allows you to re-login the user

features

  • multiple browser/client support
    • monitor and control mutiple sessions
  • multiple level verification
    • verify cookie expiration
    • verify browser agent (optional)
    • store/verify our hash at the DB level
  • non-expensive DB lookup
    • store an indexable identifier to avoid an expensive user lookup

examples

Log a user in after, assuming $user is some sort of user model :

<?

/*
 * sample code to:
 *  - log the user in
 *  - set a session cookie
 *  - store that hash/encoded string in a Summon array in the user model

 * $results is an assoc array of 
 * - 'token' set as a cookie (default named token)
 * - 'expires' when this session expires
 * - 'sessions' an update list of all the users sessions to store in the DB
*/

$results = Summon\Summon::set($user->id(true), $user->sessions);
$user->sessions = $results['sessions'];
$user->save();

Check if a user is logged in:

<?

/* 
  sample function to to: 
   - verify our cookies' validity
   - extract our cookies payload
   - verify once more in the DB 
*/

public static function loggedIn() {

  if ($data = Summon\Summon::check()) {

    $user = new DBModelOfSomeSort\user($data['user_id']);

    if ($user->exists() && isset($user->sessions[$data['hash']])) {
      return $user;
    }

  }

  return false;

}

Remove a session, logout a user

<?php

$user->summon = Summon\Summon::remove($user->summon);
$user->save();

installation

  1. modify your user table/collection to allow a small object of hash=>string
  2. store the results of summon::set() in your user model (check login.php)
  3. add code to verify expired sessions w/ a potential re-login (check check.php)
  4. add code at your logout area to remove expired hash=>strings from your user model ( check logout.php )
  5. add a define "SUMMON_SECRET" with the value of a unique hash/string and keep it safe

TODO

  • remove expired/invalid summons upon check
  • for dynamic timeouts based on agent/etc .. for reasons like tablets/phones to have a shorter expiration
  • support for more parameters for hte payload for db/index purposes

why?

I've spent hours googling this methodology enough to predict something like this needs to exist. Please if you have any comments/ideas/features let me know or even better fork this and submit pull requests.

统计信息

  • 总下载量: 340
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2015-04-17