Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
9267351
Initial fork
tzulberti Jun 21, 2012
4be017f
Added basic gitignore
tzulberti Jun 21, 2012
0384e2c
Ignoring build folder
tzulberti Jun 21, 2012
597e681
Updated keywords
tzulberti Jun 21, 2012
95315b5
Ignore build folders.
tzulberti Jun 21, 2012
f57ded4
Added zip_safe flag
tzulberti Jun 21, 2012
eb4461f
Improved documentation
tzulberti Jul 3, 2012
96ae20a
rename app and improve readme
lociii Jan 7, 2013
a578ca0
add javascript ping to keep session alive
lociii Jan 7, 2013
6c5dc73
document keepalive ping feature
lociii Jan 7, 2013
cdf8556
set version to 1.1
lociii Jan 9, 2013
3095002
update setup.py, bump to 1.1.1
lociii Jan 9, 2013
22d4b00
fix template inclusion, bump to 1.1.2
lociii Jan 9, 2013
c67bca3
change template folder, change templatetag definition, bump to 1.1.3
lociii Jan 9, 2013
c8f2b3f
include package data in setup, bump to 1.1.4
lociii Jan 9, 2013
612c2f0
Merge pull request #1 from RegioHelden/master
tzulberti Jan 17, 2013
f91ca3f
rename interval template var to prevent conflicts, bump to 1.1.5
lociii Jan 25, 2013
edb4843
Merge pull request #2 from RegioHelden/master
tzulberti Jan 25, 2013
1f66ae6
New release
tzulberti Jan 25, 2013
93fdde0
fix variable naming error, bump to 1.3.1
lociii Jan 25, 2013
ea4b502
Merge pull request #3 from RegioHelden/master
tzulberti Jan 25, 2013
9eb0937
Update middleware.py
cbluoss May 12, 2014
29925ac
Merge pull request #4 from yourcoke/patch-1
tzulberti May 13, 2014
8f0b1ec
Use of i10n causes output of variable with thousands separator
maestrofjp Jul 14, 2014
3326308
fixed localization
maestrofjp Jul 14, 2014
d373dbc
Bump to 1.4.2
maestrofjp Jul 14, 2014
3487906
Merge pull request #5 from maestrofjp/master
tzulberti Jul 16, 2014
16546b4
add django1.10 support
amigcamel Feb 20, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
*.log
*.pot
*.pyc
local_settings.py
django_session_idle_timeout.egg-info/
build/
dist/
2 changes: 2 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
include README.md
recursive-include django-session-idle-timeout/templates *
15 changes: 0 additions & 15 deletions README

This file was deleted.

90 changes: 90 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
# django-session-idle-timeout

A Django middleware application to timeout a logged in user
session after a specified time period.
A django message will be issued if the session gets timed out.

## Requirements

Make sure the following Django apps and middlewares are enabled:
* Authentication (http://docs.djangoproject.com/en/dev/topics/auth/)
* Sessions (http://docs.djangoproject.com/en/dev/topics/http/sessions/)
* Messages framework (http://docs.djangoproject.com/en/dev/ref/contrib/messages/)

```python
INSTALLED_APPS += (
'django.contrib.auth',
'django.contrib.sessions',
'django.contrib.messages',
)
```

```python
MIDDLEWARE_CLASSES += (
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
```

## Installation instructions

Install django-session-idle-timeout
```bash
easy_install django-session-idle-timeout
```

or

```bash
pip install django-session-idle-timeout
```

### Installed apps

```python
INSTALLED_APPS += (
'django-session-idle-timeout',
)
```

### Middleware

```python
MIDDLEWARE_CLASSES += (
'django-session-idle-timeout.middleware.SessionIdleTimeout',
)
```

### Settings

SESSION_IDLE_TIMEOUT defines the period after which the session gets timed out in seconds.
The default value is 30min.

```python
SESSION_IDLE_TIMEOUT = 1800
```

## Keepalive Ping

Keeps the session alive as long as the browser window is opened using a javascript ping.

### Urls

Add to your urls.py e.g.:
```python
urlpatterns += (
url(r'^django-session-idle-timeout/', include('django-session-idle-timeout.urls')),
)
```

### Template

Load the keepalive template tag to start the javascript polling:
```django
{% session_keep_alive %}
{% load session_keep_alive %}
```

## Important
This is a fork of http://github.com/subhranath/django-session-idle-timeout
File renamed without changes.
37 changes: 37 additions & 0 deletions django-session-idle-timeout/middleware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-

import time
from distutils.version import StrictVersion

import django
from django.contrib.auth import logout
from django.contrib import messages
from django.conf import settings
from django.utils.translation import ugettext as _

SESSION_IDLE_TIMEOUT = getattr(settings, 'SESSION_IDLE_TIMEOUT', 1800)

if StrictVersion(django.get_version()) >= StrictVersion('1.10'):
from django.utils.deprecation import MiddlewareMixin
else:
MiddlewareMixin = object


class SessionIdleTimeout(MiddlewareMixin):
"""Middleware class to timeout a session after a specified time period.
"""
def process_request(self, request):
# Timeout is done only for authenticated logged in users.
if request.user.is_authenticated():
current_timestamp = int(time.time())

# Timeout if idle time period is exceeded.
if request.session.has_key('last_activity') and \
(current_timestamp - request.session['last_activity']) > \
SESSION_IDLE_TIMEOUT:
logout(request)
messages.add_message(request, messages.ERROR,
_('Your session has been timed out.'))
else:
request.session['last_activity'] = current_timestamp
return None
12 changes: 12 additions & 0 deletions django-session-idle-timeout/templates/sessionidletimeout/js.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{% load url from future %}
{% load l10n %}
<script type="text/javascript">
function session_keep_alive() {
http_request = new XMLHttpRequest();
http_request.open('GET', "{% url 'django-session-idle-timeout_ping' %}");
http_request.send(null);
}

// ping every five minutes
setInterval(session_keep_alive, {{ session_keepalive_interval|unlocalize }});
</script>
1 change: 1 addition & 0 deletions django-session-idle-timeout/templatetags/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# -*- coding: UTF-8 -*-
10 changes: 10 additions & 0 deletions django-session-idle-timeout/templatetags/session_keep_alive.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# -*- coding: UTF-8 -*-
from django import template
from django.conf import settings

register = template.Library()
@register.inclusion_tag('sessionidletimeout/js.html', takes_context=True)
def session_keep_alive(context):
return context.update({
'session_keepalive_interval': int(getattr(settings, 'SESSION_IDLE_TIMEOUT', 1800)) / 2 * 1000,
})
8 changes: 8 additions & 0 deletions django-session-idle-timeout/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# -*- coding: UTF-8 -*-

from django.conf.urls import patterns, url
import views

urlpatterns = patterns('',
url(r"^/?", views.PingView.as_view(), name="django-session-idle-timeout_ping"),
)
7 changes: 7 additions & 0 deletions django-session-idle-timeout/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# -*- coding: UTF-8 -*-
from django.views.generic import View
from django.http import HttpResponse

class PingView(View):
def get(self, request):
return HttpResponse('pong')
24 changes: 0 additions & 24 deletions sessions/middleware.py

This file was deleted.

39 changes: 39 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from setuptools import setup, find_packages

setup(
name = "django-session-idle-timeout",
install_requires = [
'Django',
],
packages = find_packages(),
include_package_data=True,
version = "1.4.2",
description = "Timeout a logged user after a period of time",
long_description=open('README.md').read(-1),
author = "Tomas Zulberti",
zip_safe = False,
author_email = "[email protected]",
url = "http://github.com/tzulberti/django-session-idle-timeout",
keywords = [
"django contrib",
"session login expiration"
],
classifiers = [
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Framework :: Django',
'Programming Language :: Python',
'Programming Language :: Python :: 2.4',
'Programming Language :: Python :: 2.5',
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Topic :: Software Development :: Libraries :: Python Modules',
'Topic :: Internet :: WWW/HTTP :: WSGI',
'Topic :: Software Development :: Libraries :: Application Frameworks',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
'Environment :: Web Environment',
'Operating System :: OS Independent'
],
license = 'License :: OSI Approved :: BSD License',
)