{"id":13469308,"url":"https://github.com/jazzband/django-user-sessions","last_synced_at":"2026-01-15T22:21:01.618Z","repository":{"id":11825228,"uuid":"14378574","full_name":"jazzband/django-user-sessions","owner":"jazzband","description":"Extend Django sessions with a foreign key back to the user, allowing enumerating all user's sessions.","archived":false,"fork":false,"pushed_at":"2026-01-12T17:30:17.000Z","size":429,"stargazers_count":700,"open_issues_count":33,"forks_count":128,"subscribers_count":15,"default_branch":"master","last_synced_at":"2026-01-13T03:35:50.732Z","etag":null,"topics":["django","session-management"],"latest_commit_sha":null,"homepage":"https://pypi.python.org/pypi/django-user-sessions","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jazzband.png","metadata":{"funding":{"custom":["https://jazzband.co/donate"]},"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2013-11-13T22:39:25.000Z","updated_at":"2025-12-23T19:35:39.000Z","dependencies_parsed_at":"2023-12-25T20:02:56.448Z","dependency_job_id":"f814a698-7153-4cf1-aac7-3219b1202136","html_url":"https://github.com/jazzband/django-user-sessions","commit_stats":{"total_commits":288,"total_committers":37,"mean_commits":7.783783783783784,"dds":0.59375,"last_synced_commit":"6fc87ced61d7cc59213d459f32d04097e11e696a"},"previous_names":["bouke/django-user-sessions"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/jazzband/django-user-sessions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jazzband%2Fdjango-user-sessions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jazzband%2Fdjango-user-sessions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jazzband%2Fdjango-user-sessions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jazzband%2Fdjango-user-sessions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jazzband","download_url":"https://codeload.github.com/jazzband/django-user-sessions/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jazzband%2Fdjango-user-sessions/sbom","scorecard":{"id":23948,"data":{"date":"2025-08-04","repo":{"name":"github.com/jazzband/django-user-sessions","commit":"1ad42f36758251f221e976683eca91a8c79df09e"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":5.6,"checks":[{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":1,"reason":"1 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/jazzband/django-user-sessions/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/jazzband/django-user-sessions/release.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/jazzband/django-user-sessions/release.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/jazzband/django-user-sessions/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/jazzband/django-user-sessions/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/jazzband/django-user-sessions/test.yml/master?enable=pin","Warn: containerImage not pinned by hash: tests/Dockerfile:1: pin your Docker image by updating perl:latest to perl:latest@sha256:1216ac6f3a283546e495be3cb19ec6c412040e3b6e611e7ed108793819167928","Warn: pipCommand not pinned by hash: .github/workflows/release.yml:25","Warn: pipCommand not pinned by hash: .github/workflows/release.yml:26","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:48","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:49","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/jazzband/.github/SECURITY.md:1","Info: Found linked content: github.com/jazzband/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/jazzband/.github/SECURITY.md:1","Info: Found text in security policy: github.com/jazzband/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-14T17:25:29.908Z","repository_id":11825228,"created_at":"2025-08-14T17:25:29.908Z","updated_at":"2025-08-14T17:25:29.908Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28472626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T22:13:38.078Z","status":"ssl_error","status_checked_at":"2026-01-15T22:12:11.737Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django","session-management"],"created_at":"2024-07-31T15:01:32.713Z","updated_at":"2026-01-15T22:21:01.597Z","avatar_url":"https://github.com/jazzband.png","language":"Python","funding_links":["https://jazzband.co/donate"],"categories":["Python"],"sub_categories":[],"readme":"====================\nDjango User Sessions\n====================\n\n.. image:: https://jazzband.co/static/img/badge.svg\n    :target: https://jazzband.co/\n    :alt: Jazzband\n\n.. image:: https://github.com/jazzband/django-user-sessions/workflows/Test/badge.svg\n    :alt: GitHub Actions\n    :target: https://github.com/jazzband/django-user-sessions/actions\n\n.. image:: https://codecov.io/gh/jazzband/django-user-sessions/branch/master/graph/badge.svg\n    :alt: Test Coverage\n    :target: https://codecov.io/gh/jazzband/django-user-sessions\n\n.. image:: https://badge.fury.io/py/django-user-sessions.svg\n    :alt: PyPI\n    :target: https://pypi.org/project/django-user-sessions/\n\nDjango includes excellent built-in sessions, however all the data is hidden\naway into base64 encoded data. This makes it very difficult to run a query on\nall active sessions for a particular user. `django-user-sessions` fixes this\nand makes session objects a first class citizen like other ORM objects. It is\na drop-in replacement for `django.contrib.sessions`.\n\nI would love to hear your feedback on this package. If you run into\nproblems, please file an issue on GitHub, or contribute to the project by\nforking the repository and sending some pull requests. The package is\ntranslated into English, Dutch and other languages. Please contribute your own\nlanguage using Transifex_.\n\nAlso have a look at the bundled example templates and views to see how you\ncan integrate the application into your project.\n\nCompatible with Django 3.2 and 4.2 on Python 3.8 to 3.11.\nDocumentation is available at `readthedocs.org`_.\n\n\nFeatures\n========\n\nTo get the list of a user's sessions:\n\n.. code-block:: python\n\n    user.session_set.filter(expire_date__gt=now())\n\nOr logout the user everywhere:\n\n.. code-block:: python\n\n    user.session_set.all().delete()\n\nThe user's IP address and user agent are also stored on the session. This\nallows to show a list of active sessions to the user in the admin:\n\n.. image:: https://i.imgur.com/YV9Nx3f.png\n\nAnd also in a custom layout:\n\n.. image:: https://i.imgur.com/d7kZtr9.png\n\n\nInstallation\n============\nRefer to the `installation instructions`_ in the documentation.\n\nGeoIP\n-----\nYou need to setup GeoIP for the location detection to work. See the Django\ndocumentation on `installing GeoIP`_.\n\n\nGetting help\n============\n\nFor general questions regarding this package, please hop over to Stack\nOverflow. If you think there is an issue with this package; check if the\nissue is already listed (either open or closed), and file an issue if\nit's not.\n\n\nDevelopment\n===========\n\nHow to contribute\n-----------------\n* Fork the repository on GitHub and start hacking.\n* Run the tests.\n* Send a pull request with your changes.\n* Provide a translation using Transifex_.\n\nRunning tests\n-------------\nThis project aims for full code-coverage, this means that your code should be\nwell-tested. Also test branches for hardened code. You can run the full test\nsuite with::\n\n    make test\n\nOr run a specific test with::\n\n    make test TARGET=tests.tests.MiddlewareTest\n\nFor Python compatibility, tox_ is used. You can run the full test suite with::\n\n    tox\n\nReleasing\n---------\nThe following actions are required to push a new version:\n\n* Update release notes\n* If any new translations strings were added, push the new source language to\n  Transifex_. Make sure translators have sufficient time to translate those\n  new strings::\n\n    make tx-push\n\n* Add migrations::\n\n    python example/manage.py makemigrations user_sessions\n    git commit user_sessions/migrations -m \"Added migrations\"\n\n* Update translations::\n\n    make tx-pull\n\n* Package and upload::\n\n    bumpversion [major|minor|patch]\n    git push \u0026\u0026 git push --tags\n    python -m build --wheel\n    twine upload dist/*\n\n\nLicense\n=======\nThis project is licensed under the MIT license.\n\n\nCredits\n=======\nThis library was written by `Bouke Haarsma`_ and contributors_.\n\n\n.. _Transifex: https://explore.transifex.com/Bouke/django-user-sessions/\n.. _`readthedocs.org`: https://django-user-sessions.readthedocs.io/\n.. _`installation instructions`:\n   https://django-user-sessions.readthedocs.io/en/stable/installation.html\n.. _installing GeoIP:\n   https://docs.djangoproject.com/en/2.0/ref/contrib/gis/geoip2/\n.. _tox: https://tox.wiki/en/latest/\n.. _Bouke Haarsma:\n   https://github.com/Bouke\n.. _contributors:\n   https://github.com/jazzband/django-user-sessions/graphs/contributors\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjazzband%2Fdjango-user-sessions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjazzband%2Fdjango-user-sessions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjazzband%2Fdjango-user-sessions/lists"}