+2  A: 

If you only use the object inside the disposeSession method, you have to dispose of it there. Only class variables should be disposed by implementing IDisposable.

At the end of disposeSession method, add the folloing code to dispose of it, if it implements IDisposable.

if(toDispose is IDisposable)
  (toDispose as IDisposable).Dispose();

or you can write it like this

IDisposable disposable = toDispose as IDisposable;
if( disposable != null )
  disposable.Dispose();

edit Added a cast as corrected by the comments, and added the version using as and checking for null

Øyvind Bråthen
You still need a cast :)
leppie
I'd suggest that you use the AS statement to get an IDisposable interface and call dispose on that
Preet Sangha
yes, IDisposable disposable = toDispose as IDisposable; if (disposable != null) {disposable.Dispose();}
vc 74
@Øyvind: read up on the `as` cast – your current code does redundant work. *Always* use the idiom posted by @vc74 instead.
Konrad Rudolph
Actually, this will dispose the timer, in case no one noticed. :)
leppie
@leppie: You're right.. My bad. Deleting my comment.
Oren A