Testing Django application cookies , sessions and states
The two statements do not contradict one another.
You can use self.client more than once during one test. You can log in, and the cookie handling in the test client will 'remember' your session, for subsequent requests.
Only when the test is done, is that state cleared.
You do not need to log out, because that's a client state stored with cookies, and that state is cleared when the test is done. Only use .logout() if you wanted to test what happens after a user has logged in but their session has expired, or similar scenarios.
While reading the documentation I've come across two contradicts paragraphes that I couldn't really understand 
First one says:

The test client is stateful. If a response returns a cookie, then that cookie will be stored >in the test client and sent with all subsequent get() and post() requests.
Expiration policies for these cookies are not followed. If you want a cookie to expire, >either delete it manually or create a new Client instance (which will effectively delete all >cookies).

While the other: 

Every test case in a django.test.TestCase instance has access to an instance of a Django >test client. This client can be accessed as self.client. This client is recreated for >each test, so you don’t have to worry about state (such as cookies) carrying over from >one test to another.

Simply put, if I were to test login, do I have to use django.contrib.auth.logout()
after each login() || post('/login/',data) ?
or is it that each test case login|post|get has it's own state/cookies/session data ?
it's a bit confusing for me.