Best practice really depends on the scenario (including business case, programming language, etc.). However, here are some high level pros/cons.
URL Pros: easy to read/write
URL Cons: user can easily manipulate them causing unintended results, nasty URLs
Session pros: should be pretty easy to read/write programmatically (depending on the language), don't have to worry about parameters in a URL
Session cons: takes up more memory (may be negligible depending on the data)
Cookie pros: doesn't take up memory
Cookie cons: must read/write to a file, user could delete cookies at any time (mid-session), cookies shared within the browser (1 cookie for any number of sessions)