url_session 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +61 -0
- data/Rakefile +1 -0
- data/lib/action_dispatch/session/url_session_store.rb +35 -0
- data/lib/url_session.rb +3 -0
- data/lib/url_session/controller.rb +26 -0
- data/lib/url_session/version.rb +3 -0
- data/url_session.gemspec +25 -0
- metadata +93 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# UrlSession
|
2
|
+
|
3
|
+
UrlSession stores your session in memcache (dalli), puts session_id to every url and parses it in midleware
|
4
|
+
|
5
|
+

|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
$ gem install url_session
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
Add gem to your Gemfile
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem 'url_session'
|
17
|
+
```
|
18
|
+
|
19
|
+
configure session_store to use url_session (session_store.rb)
|
20
|
+
```ruby
|
21
|
+
UrlSessionExample::Application.config.session_store :url_session_store, :namespace => 'sessions',
|
22
|
+
:key =>"_session", :compress => true, :expire_after => 1.day, :cookie_enabled => false, :param => 'session_id'
|
23
|
+
```
|
24
|
+
|
25
|
+
and include UrlSession in your ApplicationController
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
class ApplicationController < ActionController::Base
|
29
|
+
include ControllerAuthentication
|
30
|
+
protect_from_forgery
|
31
|
+
|
32
|
+
include UrlSession::Controller
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
|
37
|
+
You can put your all routes in session_id scope, if you want (routes.rb)
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
scope "/(:session_id)" do
|
41
|
+
resources :sessions
|
42
|
+
resources :users
|
43
|
+
resources :posts
|
44
|
+
...
|
45
|
+
match '/' => 'posts#index', :as => :root # root :to => 'posts#index' doesn't work here
|
46
|
+
end
|
47
|
+
```
|
48
|
+
|
49
|
+
## Options
|
50
|
+
|
51
|
+
The same like dalli_store plus:
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
:param => 'PHPSESSID' # name of session id parameter, default 'session_id'
|
55
|
+
:cookie_enabled => false # try to use cookie before url, default true
|
56
|
+
```
|
57
|
+
|
58
|
+
## Example
|
59
|
+
|
60
|
+
http://url-session-example.herokuapp.com
|
61
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'active_support/cache'
|
2
|
+
require 'action_dispatch/middleware/session/abstract_store'
|
3
|
+
require 'action_dispatch/middleware/session/dalli_store'
|
4
|
+
require 'dalli'
|
5
|
+
|
6
|
+
module ActionDispatch
|
7
|
+
module Session
|
8
|
+
class UrlSessionStore < DalliStore
|
9
|
+
|
10
|
+
def initialize(app, options = {})
|
11
|
+
super
|
12
|
+
|
13
|
+
@default_options = { :param => 'session_id',
|
14
|
+
:cookie_enabled => false }.merge(@default_options)
|
15
|
+
@cookie_enabled = @default_options[:cookie_enabled]
|
16
|
+
@param = @default_options[:param].to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def set_cookie(*args)
|
22
|
+
super if @cookie_enabled
|
23
|
+
end
|
24
|
+
|
25
|
+
def extract_session_id(env)
|
26
|
+
request = ActionDispatch::Request.new(env)
|
27
|
+
(
|
28
|
+
(super if @cookie_enabled) ||
|
29
|
+
request.path.scan(/^\/(\w{32})/).flatten.first ||
|
30
|
+
request.query_parameters[@param].to_s.scan(/^(\w{32})$/).flatten.first
|
31
|
+
).presence
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/url_session.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module UrlSession::Controller
|
2
|
+
def self.included(base)
|
3
|
+
base.send :before_filter, :set_session_id
|
4
|
+
end
|
5
|
+
|
6
|
+
def url_options
|
7
|
+
options = Rails.application.config.session_options
|
8
|
+
key = options[:key] || '_session_id'
|
9
|
+
param = options[:param] || 'session_id'
|
10
|
+
cookie = !options[:cookie_enabled] || cookies[key].blank?
|
11
|
+
session_id = request.session_options[:id]
|
12
|
+
{ param.to_sym => cookie.presence && session_id }.merge super
|
13
|
+
end
|
14
|
+
|
15
|
+
def reset_session
|
16
|
+
super
|
17
|
+
set_session_id
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def set_session_id
|
22
|
+
unless request.session_options[:id]
|
23
|
+
request.session_options.merge!({:id => SecureRandom.hex(16)})
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/url_session.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "url_session/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "url_session"
|
7
|
+
s.version = UrlSession::VERSION
|
8
|
+
s.authors = ["Krzysztof Jablonski"]
|
9
|
+
s.email = ["jablko@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Session id in url}
|
12
|
+
s.description = %q{UrlSession stores your session in memcache (dalli), puts session_id to every url and parses it in midleware}
|
13
|
+
|
14
|
+
s.rubyforge_project = "url_session"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
s.add_runtime_dependency "dalli", '>= 1.1.0'
|
24
|
+
s.add_runtime_dependency "rails", '~> 3.2.0'
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: url_session
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Krzysztof Jablonski
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-05-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: dalli
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.1.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.1.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rails
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 3.2.0
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 3.2.0
|
46
|
+
description: UrlSession stores your session in memcache (dalli), puts session_id to
|
47
|
+
every url and parses it in midleware
|
48
|
+
email:
|
49
|
+
- jablko@gmail.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- .gitignore
|
55
|
+
- Gemfile
|
56
|
+
- README.md
|
57
|
+
- Rakefile
|
58
|
+
- lib/action_dispatch/session/url_session_store.rb
|
59
|
+
- lib/url_session.rb
|
60
|
+
- lib/url_session/controller.rb
|
61
|
+
- lib/url_session/version.rb
|
62
|
+
- url_session.gemspec
|
63
|
+
homepage: ''
|
64
|
+
licenses: []
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
hash: -3217570099020623775
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
segments:
|
85
|
+
- 0
|
86
|
+
hash: -3217570099020623775
|
87
|
+
requirements: []
|
88
|
+
rubyforge_project: url_session
|
89
|
+
rubygems_version: 1.8.24
|
90
|
+
signing_key:
|
91
|
+
specification_version: 3
|
92
|
+
summary: Session id in url
|
93
|
+
test_files: []
|