#30045 closed Bug (needsinfo)
"can't concat str to bytes error" on SessionMiddleware with python 3 — at Version 2
| Reported by: | fmdra | Owned by: | nobody |
|---|---|---|---|
| Component: | contrib.sessions | Version: | 2.1 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I recently moved to python 3 and django 2.1 (from 2.7.x and 1.11.x, respectively).
I'm hitting this issue:
"can't concat str to bytes error"
I believe the following line needs to be changed from:
return base64.b64encode(hash.encode() + b":" + serialized).decode('ascii')
to:
return base64.b64encode(hash.encode() + b":" + serialized.encode()).decode('ascii')
Below is a redacted traceback:
Environment:
Request Method: GET
Request URL: <redacted>
Django Version: 2.1.4
Python Version: 3.6.6
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'<redacted>']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "<redacted>/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "<redacted>/lib/python3.6/site-packages/django/utils/deprecation.py" in __call__
93. response = self.process_response(request, response)
File "<redacted>/lib/python3.6/site-packages/django/contrib/sessions/middleware.py" in process_response
58. request.session.save()
File "<redacted>/lib/python3.6/site-packages/django/contrib/sessions/backends/db.py" in save
83. obj = self.create_model_instance(data)
File "<redacted>/lib/python3.6/site-packages/django/contrib/sessions/backends/db.py" in create_model_instance
70. session_data=self.encode(data),
File "<redacted>/lib/python3.6/site-packages/django/contrib/sessions/backends/base.py" in encode
98. return base64.b64encode(hash.encode() + b":" + serialized).decode('ascii')
Exception Type: TypeError at <redacted>
Exception Value: can't concat str to bytes
Change History (2)
comment:1 by , 7 years ago
| Resolution: | → needsinfo |
|---|---|
| Status: | new → closed |
comment:2 by , 7 years ago
| Component: | Uncategorized → contrib.sessions |
|---|---|
| Description: | modified (diff) |
| Type: | Uncategorized → Bug |
Note:
See TracTickets
for help on using tickets.
Hi.
Can you put a breakpoint into
encode()here?What is
self.serializerandserialized? The serializerdumps()method should return bytes. Both the shipped serializer classes do this, so there's some question as to how this error could come up.Are you using a custom serializer that's not correctly using bytes?
You need to reduce this to a minimal case showing Django is at fault. If you need help please see TicketClosingReasons/UseSupportChannels.